명품 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();
}
}
'IT > 프로그래밍' 카테고리의 다른 글
두근두근 파이썬 연습문제 2장 (0) | 2020.12.01 |
---|---|
두근두근 파이썬 연습문제 1장 (0) | 2020.12.01 |
명품 JAVA Programming 연습문제 13장 (0) | 2020.11.30 |
명품 JAVA Programming 연습문제 12장 (0) | 2020.11.30 |
명품 JAVA Programming 연습문제 11장 (0) | 2020.11.29 |
댓글