대학교 수업/Java 프로그래밍

[Java] 명품 자바 프로그래밍 14장 실습문제 (1~6)

Jongung 2022. 12. 5. 22:06

1번

import javax.swing.*;

public class Chapter14 extends JFrame {
    public Chapter14() {
        setTitle("메뉴 만들기");
        setDefaultCloseOperation(3);

        createMenu();
        setSize(300,200);
        setVisible(true);
    }
    private void createMenu() {
        JMenu fileMenu = new JMenu("파일");
        JMenu editMenu = new JMenu("편집");
        JMenu viewMenu = new JMenu("보기");
        viewMenu.add(new JMenuItem("화면확대"));
        viewMenu.add(new JMenuItem("쪽윤곽"));
        JMenu inputMenu = new JMenu("입력");
        JMenuBar mb = new JMenuBar();
        mb.add(fileMenu);
        mb.add(editMenu);
        mb.add(viewMenu);
        mb.add(inputMenu);
        setJMenuBar(mb);
    }
    static public void main(String[] arg) {
        new Chapter14();
    }
}

 

2번

import javax.swing.*;
import javax.swing.filechooser.FileNameExtensionFilter;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Chapter14 extends JFrame {

    JLabel label = new JLabel();
    public Chapter14() {
        setTitle("메뉴로 배경 이미지 로딩하기");
        setDefaultCloseOperation(3);
        createMenu();
        setSize(300,200);
        getContentPane().add(label);
        setVisible(true);
    }
    void createMenu() {
        JMenuBar mb = new JMenuBar();
        JMenu fileMenu = new JMenu("파일");
        JMenuItem fileItem = new JMenuItem("열기");
        fileItem.addActionListener(new MyFileActionListener());
        fileMenu.add(fileItem);
        mb.add(fileMenu);
        setJMenuBar(mb);
    }
    class MyFileActionListener implements ActionListener{
        private JFileChooser chooser;
        MyFileActionListener(){
            chooser = new JFileChooser();
        }
        public void actionPerformed(ActionEvent e) {
            FileNameExtensionFilter filter = new FileNameExtensionFilter(
                    "JPG & GIF Images", "jpg", "gif"
            );
            chooser.setFileFilter(filter);
            int ret = chooser.showOpenDialog(null);
            if(ret != JFileChooser.APPROVE_OPTION){
                JOptionPane.showMessageDialog(null, "파일을 선택하지 않았습니다", "경고", JOptionPane.WARNING_MESSAGE);
                return;
            }
            String filePath = chooser.getSelectedFile().getPath();
            label.setIcon(new ImageIcon(filePath));
            System.out.println(getWidth() + " " + getHeight());
            pack();

        }
    }
    static public void main(String[] arg) {
        new Chapter14();
    }
}

 

3번

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Chapter14 extends JFrame {
    public Chapter14() {
        setTitle("툴바 만들기");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Container c = getContentPane();

        JToolBar tBar = new JToolBar();
        JButton btn = new JButton("종료");
        btn.addActionListener(new CloseActionListener());
        tBar.add(btn);
        c.add(tBar, BorderLayout.NORTH);
        setSize(400,400);
        setVisible(true);
    }

    class CloseActionListener implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            int result = JOptionPane.showConfirmDialog(null, "정말 종료하시겠습니까", "옵션팬", JOptionPane.YES_NO_OPTION);
            if(result == JOptionPane.CLOSED_OPTION) {
                return;
            }
            else if(result == JOptionPane.YES_OPTION) {
                System.exit(0);
            }
            else {
                return;
            }
        }
    }

    static public void main(String[] arg) {
        new Chapter14();
    }
}

 

4번

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Chapter14 extends JFrame {
    public Chapter14() {
        setTitle("숫자가 아닌 키가 입력되는경우 경고창 만들기");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Container c = getContentPane();

        JToolBar tBar = new JToolBar();
        JTextField textField = new JTextField(10);
        textField.addKeyListener(new MyKeyAdapter());
        tBar.add(textField);
        c.add(tBar, BorderLayout.SOUTH);
        setSize(400,400);
        setVisible(true);
    }

    class MyKeyAdapter extends KeyAdapter {
        public void keyTyped(KeyEvent e) {
            char key = e.getKeyChar();
            if(!Character.isDigit(key)){
                e.consume();
                JOptionPane.showMessageDialog(null,   key+"는 숫자 키가 아닙니다. 숫자를 입력하세요.", "경고", JOptionPane.WARNING_MESSAGE);
            }
        }
    }
    
    static public void main(String[] arg) {
        new Chapter14();
    }
}

 

5번

//출판사 참고
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.sound.sampled.*;
import javax.swing.*;

public class Chapter14 extends JFrame {
    private Clip clip = null;
    private AudioInputStream audioStream = null;
    private JLabel msgLabel = new JLabel("");

    public Chapter14() {
        super("오디오 시작 중단 연습");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Container c = getContentPane();

        c.setLayout(new FlowLayout());
        msgLabel.setFont(new Font("Gothic", Font.PLAIN, 15));
        c.add(msgLabel);
        setSize(300,150);
        setVisible(true);

        playAudio("audio\\hiphop.wav");
        msgLabel.setText("audio\\hiphop.wav 연주 중");

        c.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseEntered(MouseEvent e) {
                msgLabel.setText("audio\\hiphop.wav 연주 계속");
                clip.start(); // 중단된 위치에서부터 시작
            }

            @Override
            public void mouseExited(MouseEvent e) {
                msgLabel.setText("audio\\hiphop.wav 연주 일시 중단");
                clip.stop(); // 중단된 위치에서부터 시작
            }

        });
    }

    private void playAudio(String pathName) {
        try {
            File audioFile = new File(pathName); // 오디오 파일의 경로명
            audioStream = AudioSystem.getAudioInputStream(audioFile); // 오디오 파일로부터

            clip = AudioSystem.getClip(); // 비어있는 오디오 클립 만들기
            clip.open(audioStream); // 재생할 오디오 스트림 열기
            clip.start(); // 재생 시작
        }
        catch (LineUnavailableException e) { e.printStackTrace(); }
        catch (UnsupportedAudioFileException e) { e.printStackTrace(); }
        catch (IOException e) { e.printStackTrace(); }
    }

    static public void main(String[] arg) {
        new Chapter14();
    }
}

 

 

6번

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class Chapter14 extends JFrame{

    JButton btn = new JButton("Calculate");
    JLabel label = new JLabel("계산 결과 출력");

    Chapter14(){
        setTitle("다이얼로그 만들기");
        setDefaultCloseOperation(3);
        Container c = getContentPane();
        c.setLayout(new FlowLayout());
        c.add(btn);
        c.add(label);

        btn.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                MyDialog dialog = new MyDialog();
                dialog.setVisible(true);
            }
        });
        setSize(300,300);
        setVisible(true);
    }


    class MyDialog extends JDialog{
        JTextField tf1 = new JTextField(10);
        JTextField tf2 = new JTextField(10);
        JButton addBtn = new JButton("Add");
        MyDialog(){
            setLayout(new FlowLayout());
            add(new JLabel("두 수를 더합니다"));
            add(tf1);
            add(tf2);
            add(addBtn);
            setSize(200,200);
            setTitle("Calculation Dialog");
            addBtn.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    int result = Integer.parseInt(tf1.getText()) + Integer.parseInt(tf2.getText());
                    label.setText(Integer.toString(result));
                    setVisible(false);
                }
            });
        }
    }

    public static void main(String[] args) {
        new Chapter14();
    }
}