1. GUI 연습문제 (1)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | package guiex; import java.awt.Frame; import java.awt.MenuItem; import java.awt.PopupMenu; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; public class GuiTest11 { public static void main(String[] args) { Frame fr = new Frame("마우스 이벤트"); fr.setBounds(100, 200, 500, 500); fr.setVisible(true); PopupMenu menu = new PopupMenu(); menu.add(new MenuItem("cut")); menu.add(new MenuItem("copy")); menu.add(new MenuItem("paste")); fr.add(menu); fr.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { System.exit(0); } }); fr.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { System.out.println("Mouse Click!"); } @Override public void mousePressed(MouseEvent e) { System.out.println(e.getModifiers()); if(e.getModifiers() == MouseEvent.BUTTON3_MASK) { System.out.println("Right button Click!"); menu.show(fr, e.getX(), e.getY()); } } }); } } | cs |
# 설명
Line 18: PopupMenu 컴포넌트를 생성한다.
Line 19~21: PopupMenu에 MenuItem들을 붙인다.
Line 24~29: 프레임의 닫기버튼을 눌렀을 경우 프로그램을 종료시킨다.
Line 31~46: 마우스 이벤트를 통해 처리하는 부분
Line 33~35: 마우스가 클릭되었을 때 문자열을 출력한다.
Line 38~45: 마우스가 눌렸을 때 실행되는 부분
Line 41~43: 만약 마우스의 오른쪽 버튼을 눌렀다면, 그 자리에서 PopupMenu가 보여지게 된다.
# 실행 화면
2. GUI 연습문제 (2)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 | package guiex; import java.awt.BorderLayout; import java.awt.Button; import java.awt.Color; import java.awt.Font; import java.awt.Frame; import java.awt.Panel; import java.awt.TextArea; import java.awt.TextField; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; class MessageBox { Frame fr; Panel nPanel; Panel sPanel; TextField tf; TextArea ta; Button nInput, sSave, sClear, sQuit; public MessageBox() { // 컨테이너 fr = new Frame("Message Box"); // NORTH nPanel = new Panel(); nInput = new Button("Input"); tf = new TextField(20); // CENCER ta = new TextArea(); // SOUTH sPanel = new Panel(); sSave = new Button("Save"); sClear = new Button("Clear"); sQuit = new Button("Quit"); layout(); event(); }// constructor() void layout() { // 컨테이너 fr.setVisible(true); fr.setBounds(900, 300, 400, 600); fr.setBackground(Color.DARK_GRAY); fr.setLayout(new BorderLayout()); fr.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 20)); // NORTH fr.add(nPanel, BorderLayout.NORTH); nPanel.setBackground(Color.PINK); nPanel.add(tf); nPanel.add(nInput); // CENTER fr.add(ta); // SOUTH fr.add(sPanel, BorderLayout.SOUTH); sPanel.setBackground(Color.PINK); sPanel.add(sSave); sPanel.add(sClear); sPanel.add(sQuit); }// layout() void event() { // Frame Exit fr.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { System.exit(0); } }); ta.setEditable(false); // Input Button nInput.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if (e.getActionCommand().equals("Input")) { if (!(tf.getText().charAt(0) == ' ')) { ta.append(tf.getText() + "\n"); } tf.setText(""); // 입력후, 텍스트제거 tf.requestFocus(); // 입력후, 커서 활성화 } } }); // Quit Button sQuit.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.exit(0); } }); // Clear Button sClear.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { ta.setText(""); } }); }// event() } public class GuiTest12 { public static void main(String[] args) { new MessageBox(); } } | cs |
# 설명
Line 66~89: 컨테이너, 컴포넌트를 지정하는 layout() 메서드
Line 91~135: 이벤트 발생시 처리하는 event() 메서드
Line 101: TextArea 영역을 수정할 수 없게 지정한다.
Line 104~116: TextField 영역을 통해 입력한 문자열을 TextArea 영역에 덧붙인다.
단, 공백일 경우에는 붙이지 않는다.
Line 108: 현재 이벤트를 발생한 컴포넌트의 레이블이 Input과 같은 때 이하 코드가 실행된다.
Line 109: 만약 입력된 문자열의 첫번째 문자가 공백이 아닐 때 이하 코드가 실행된다.
Line 110: 입력된 문자열을 TextArea에 붙인다.
Line 112: 입력 후 TextField의 텍스트를 제거한다.
Line 113: 입력 후 TextField에 커서를 활성화시킨다.
Line 119~125: Quit 버튼을 눌렀을 때 이벤트를 처리하는 부분
Line 128~134: Clear 버튼을 눌렀을 때 이벤트를 처리하는 부분
Line 132: TextArea에 있는 모든 텍스트들을 공백처리하여 지운다.
# 실행 화면
'JAVA > JAVA2' 카테고리의 다른 글
JAVA2_day14 | 컬렉션 (Collection) (1) (0) | 2018.01.31 |
---|---|
JAVA2_day14 | Generic (제네릭 기법) (0) | 2018.01.31 |
JAVA2_day13 | GUI (PopupMenu, MenuItem) (0) | 2018.01.30 |
JAVA2_day12 | 내부 클래스 (Inner class) (0) | 2018.01.30 |
JAVA2_day11 | GUI 연습문제 (1) (0) | 2018.01.30 |