Day24 GUI 그래픽 사용자 인터페이스 // 이벤트 처리
GUI
1세대 : AWT(Abatract Windows Toolkit) -> OS로부터 그래픽 자원을 빌려 씀
2세대 : Swing -> 자바 내부적으로 그래픽 자원 지원
3세대 : FX
패널(panel)은 컴포넌트들을 가질 수 있는 컨테이너
레이블은 편집이 불가능한 텍스트
이벤트 처리 과정
1. 이벤트가 발생할 컴포넌트를 생성
2. 원하는 이벤트를 처리하는 리스터 인터페이스를 구현
3. 1번 컴포넌트에 2번객체를 연결
import java.awt.*; import javax.swing.*; class MyFrame extends JFrame { private JButton btn; private JLabel label; //컴포넌트들을 Frame클래스의 멤버변수로 선언 private JTextField tF;
public MyFrame(){ btn = new JButton(); label = new JLabel("달러값 입력"); btn = new JButton(); btn = new JButton(); btn.setText("환전"); tF = new JTextField(5); this.add(tF); this.add(btn); this.add(label); btn.addActionListener(new MyListener()); //이벤트 처리 구현 클래스의 객체를 컴포넌트에 연결 setTitle("MyFrame"); setSize(300,200); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLayout(new FlowLayout()); setVisible(true); } class MyListener implements ActionListener{ public void actionPerformed(ActionEvent e){ // System.out.println("그만눌러"); try{ String money = tF.getText(); int num = Integer.parseInt(money); // num++; int result = num*1142; String result2 = String.valueOf(result+"원"); label.setText(result2); }catch(NumberFormatException e1){ // e1.printStackTrace(); } // ((JButton) e.getSource()).setText("눌렸다"); } //리스너 구현클래스가 프레임 클래스의 내부로 들어가면 프레임의 멤버변수인 } // 컴포넌트들에 접근이 자유롭다. } public class MyFrameTest { public static void main(String[] args) { MyFrame f = new MyFrame(); } } |
이벤트 처리기의 위치
1) 별도의 클래스로 이벤트 처리기를 작성
2) 내부클래스로 이벤트 처리기를 작성
3) 프레임 클래스가 이벤트 처리기도 함께 구현