본문 바로가기
IT/프로그래밍

명품 JAVA Programming 연습문제 14장

by nutrient 2020. 11. 30.
728x90
728x170

명품 JAVA Programming 연습문제 14장

 

1. 파일 , 편집, 보기, 입력 등의 4가지 메뉴를 가진 스윙 프로그램을 작성하라. 보기 메뉴에만 화면확대, 쪽 윤곽 의 2개의 메뉴 아이템이 있다.

import java.awt.*;

import java.awt.Event

import javax.swing.*;



class Frame1 extends JFrame

{

        JPanel p = new JPanel();

        JMenuBar mb = new JMenuBar();

        JMenu file = new JMenu("파일");

        JMenu edit = new JMenu("편집");

        JMenu see = new JMenu("보기");

        JMenu in = new JMenu("입력");

        Frame1()

        {

                this.setTitle("Test");

                this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                this.setSize(300, 300);

                this.setVisible(true);

                p.setLayout(new BorderLayout());

                see.add(new JMenuItem("화면확대"));

                see.add(new JMenuItem("쪽윤곽"));

                mb.add(file);

                mb.add(edit);

                mb.add(see);

                mb.add(in);

                p.add(mb, BorderLayout.NORTH);

                this.add(p);



        }

}



public class m1

{

        public static void main(String[] args)

        {

                new Frame1();

        }



}

 

2. 파일 메뉴에 열기 메뉴 아이템을 하나 만든다. 이 메뉴 아이템을 선택하면 파일 열기 다이얼로그를 출력하고 사용자가 JPG 이미지 파일을 선택하면 이 이미지를 프레임의 바탕화면 전체에 그리는 스윙 응용프로그램을 작성하라. 이미지를 그리기 위해서 JLabel을 이용하지 말고 Graphics의 drawImage() 메소드를 이용하라.

import java.awt.*;

import java.awt.event.*;

import javax.swing.filechooser.FileNameExtensionFilter;

import javax.swing.*;



class Frame2 extends JFrame

{

        JPanel p = new JPanel();

        MyLabel la = new MyLabel();

        JMenuBar mb = new JMenuBar();

        JMenu file = new JMenu("파일");

        JMenuItem open = new JMenuItem("열기");

        ImageIcon icon = new ImageIcon("image/1.jpg");

        Image img = icon.getImage();

        Frame2()

        {

                this.setTitle("Test");

                this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                p.setLayout(new BorderLayout());

                open.addActionListener(new My());

                file.add(open);

                mb.add(file);

                p.add(mb, BorderLayout.NORTH);

                p.add(la, BorderLayout.CENTER);

                this.add(p);

                this.setSize(300, 300);

                this.setVisible(true);

        }

        class MyLabel extends JLabel

        {

                public void paintComponent(Graphics g)

                {

                        super.paintComponent(g);

                        img = icon.getImage();

                        g.drawImage(img, 0,0, 280, 250, this);

                        repaint();

                }

        }

        class My implements ActionListener

        {

                JFileChooser ch

                My()

                {

                        ch = new JFileChooser();

                }

                public void actionPerformed(ActionEvent arg0)

                {

                        FileNameExtensionFilter filter = new FileNameExtensionFilter("JPG,GIF", "jpg","gif");

                        ch.setFileFilter(filter);



                        int ret = ch.showOpenDialog(null);

                        if(ret != JFileChooser.APPROVE_OPTION)

                        {

                                JOptionPane.showMessageDialog(null, "파일을 선택하지않았습니다.","경고",JOptionPane.WARNING_MESSAGE);

                                return;

                        }



                        String filePath = ch.getSelectedFile().getPath();

                        icon = new ImageIcon(filePath);

                        

                }



        }

}



public class m2

{

        public static void main(String[] args)

        {

                new Frame2();

        }



}

 


3. 툴바를 만들고 죵료 버튼을 하나 단다. 이 버튼을 선택하면 JOptionPane을 이용하여 YES_NO_OPTION에 “정말 종료하시겠습니까?” 메시지를 출력하는 확인 다이얼로그를 출력하라. 그리고 사용자가 “예(Y)”로 답한 경우에만 응용프로그램을 종료하는 스윙 응용프로그램을 작성하라.

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;



class Frame3 extends JFrame

{

        JFrame f = this;

        JPanel p;

        JButton btn;

        Frame3()

        {

                this.setTitle("Test");

                this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);



                btn = new JButton("종료");

                btn.addActionListener(new My());

                p = new JPanel();

                p.add(btn);

                this.add(p);

                this.setSize(300, 300);

                this.setVisible(true);

        }



        class My implements ActionListener

        {



                public void actionPerformed(ActionEvent e)

                {

                        int result = JOptionPane.showConfirmDialog(null, "정말 종료하시겠습니까?","죵료 여부 확인",JOptionPane.YES_NO_OPTION);

                        if(result == JOptionPane.CLOSED_OPTION)

                        {



                        }

                        else if(result == JOptionPane.YES_OPTION)

                        {

                                System.exit(0);

                        }

                        else

                        {



                        }

                }



        }

}

public class m3

{

        public static void main(String[] args)

        {

                new Frame3();

        }



}


4.툴바에 그림과 같이 학번을 입력하는 텍스트필드 컴포넌트를 삽입하고 툴바를 프레임의 하단에 부착하라. 이 텍스트필드 컴포넌트에는 오직 숫자만이 입력되도록 하기 위해 사용자가 숫자가 아닌 키를 입력하면 그림과 같은 경고 메시지를 가진 경고 창을 출력하도록 하라.

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;



class Frame4 extends JFrame

{

        JPanel p;

        JToolBar bar;

        JTextField tf;

        JLabel la;

        Frame4()

        {

                this.setTitle("Test");

                this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                p = new JPanel();

                la = new JLabel("학번");

                p.setLayout(new BorderLayout(2,2));

                bar = new JToolBar("Name");

                tf = new JTextField(20);

                tf.addKeyListener(new My());



                bar.add(la);

                bar.add(tf);

                p.add(bar, BorderLayout.WEST);



                this.add(p, BorderLayout.SOUTH);

                this.setSize(300, 300);

                this.setVisible(true);

        }



        class My implements KeyListener

        {



                public void keyPressed(KeyEvent e) {}



                public void keyReleased(KeyEvent arg0) {}



                public void keyTyped(KeyEvent e)

                {

                        char code = e.getKeyChar();

                        if(code<48 || code> 57)

                        {

                                JOptionPane.showMessageDialog(null, code+"는 숫자가 아닙니다.\n숫자를입력하세요.","숫자 여부 확인",JOptionPane.ERROR_MESSAGE);

                                e.consume();

                        }



                }



        }

}

public class m4

{

        public static void main(String[] args)

        {

                new Frame4();

        }



}

 

5. “Calculate” 버튼과 레이블을 가진 프레임을 작성하라. JDialog를 상속받아 CalcDialog를 다음 그림과 같이 구현하고, “Calculate” 버튼을 클릭하면 CalcDialog가 출력되도록 하라. 사용자로부터 두 정수를 입력받고 “Add”버튼을 클릭하면 그 결과 값이 레이블에 출력되도록 하라. CalcDialog는 모달 다이얼로그로 만들어라.

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;





class Frame5 extends JFrame

{

        JPanel p;

        JButton cal;

        JLabel result;

        MyDialog dia;

        Frame5()

        {

                this.setTitle("Test");

                this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                p = new JPanel();

                cal = new JButton("Calculate");

                cal.addActionListener(new My());

                result = new JLabel("계산 결과 출력");

                p.add(cal);

                p.add(result);

                this.add(p);

                this.setSize(300, 300);

                this.setVisible(true);

        }



        class My implements ActionListener

        {

                public void actionPerformed(ActionEvent e)

                {

                        if(e.getActionCommand().equals("Calculate"))

                        {

                                dia = new MyDialog();

                        }

                        else if(e.getActionCommand().equals("Add"))

                        {

                                int a = Integer.parseInt(dia.a.getText());

                                int b = Integer.parseInt(dia.b.getText());

                                int sum = a+b;

                                result.setText(Integer.toString(sum));

                        }

                }



        }

        class MyDialog extends JDialog

        {

                JPanel p = new JPanel();

                JLabel la = new JLabel("두 수를 더합니다.");

                JTextField a = new JTextField(10);

                JTextField b = new JTextField(10);

                JButton add = new JButton("Add");

                MyDialog()

                {

                        this.setTitle("Calculation Dialog");

                        add.addActionListener(new My());

                        p.add(la);

                        p.add(a);

                        p.add(b);

                        p.add(add);

                        this.add(p);

                        this.setSize(150, 200);

                        this.setVisible(true);

                }

        }

}





public class m5

{

        public static void main(String[] args)

        {

                new Frame5();

        }



}


6. 두 개의 탭을 가진 탭팬을 만들어보자. 첫 번째 탭에는 두 개의 텍스트필드를 두고 정수를 두 개 입력받도록 한다. 두 번째 탭에는 두 수의 합을 출력하는 레이블 컴포넌트를 가진다. 사용자가 첫 번째 탭에서 두 개의 정수를 입력하고 두 번째 탭을 선택하면 두 수의 합이 레이블에 출력된다.

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

import javax.swing.event.ChangeEvent;

import javax.swing.event.ChangeListener;



class Frame6 extends JFrame

{

        JPanel p;

        JTabbedPane pane;

        JLabel la;

        JLabel plus;

        JTextField a;

        JTextField b;



        Frame6()

        {

                this.setTitle("Test");

                this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                p = new JPanel();

                pane = new JTabbedPane();

                la = new JLabel("결과는");

                plus = new JLabel("+");

                a = new JTextField(10);

                b = new JTextField(10);

                p.add(a);

                p.add(plus);

                p.add(b);

                pane.addTab("계산입력", p);

                pane.addTab("결과보기", la);

                pane.addChangeListener(new My());

                this.add(pane);

                this.setSize(300, 100);

                this.setVisible(true);

        }

        class My implements ChangeListener

        {

                public void stateChanged(ChangeEvent e)

                {

                        int as = Integer.parseInt(a.getText());

                        int bs = Integer.parseInt(b.getText());

                        int sum = as+bs;

                        la.setText("결과는 " +Integer.toString(sum));

                }



        }



}



public class m6

{



        public static void main(String[] args)

        {

                new Frame6();

        }



}
 
 
 
 
728x90
그리드형

댓글