Develop/JAVA
JAVA GUI
soleil.ardent
2011. 12. 13. 09:09
[자바 GUI]
Head First Java 의 GUI 예제입니다. ^^
GUI 소스에서 자바의 이벤트 처리까지 있는 좋은 소스입니다.
이벤트 처리를 내부 클래스를 이용하여 처리합니다.
설명은 주석이 있으니 패스 하고 소스로 바로 넘어가죠~
public class simpleUI3 { JFrame frame; // 간단하게 창틀이라고 생각하면 쉽습니다. JLabel label; // frame 의 작은 배경이라 생각하세요. public static void main (String[] args) { simpleUI3 gui = new simpleUI3(); gui.go(); } public void go() { frame = new JFrame(); //frame 창 닫히는 기능추가 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JButton labelButton = new JButton("Change Label"); // 버튼이 하나면 btn.addActionListener(this) //리스너(this)를 버튼에 추가하여 사용 // 여기서는 버튼의 리스너 등록 메소드에 this 가 아닌 // 다른 리스너 클래스(내부 클래스) 를 가지고 만든 객체를 전달 labelButton.addActionListener(new LabelButtonListener()); JButton colorButton = new JButton("Change Circle"); colorButton.addActionListener(new ColorButtonListener()); label = new JLabel("I'm a label"); MyDrawPanel drawPanel = new MyDrawPanel(); // button & label 을 frame 에 추가 // 인자가 하니인 add 는 편법 //frame.getContentPane().add(colorButton); frame.getContentPane().add(BorderLayout.SOUTH , colorButton); frame.getContentPane().add(BorderLayout.CENTER, drawPanel); frame.getContentPane().add(BorderLayout.EAST, labelButton); frame.getContentPane().add(BorderLayout.WEST, label); frame.setSize(420,300); // 창 크기 설정 frame.setVisible(true); // frame 화면이 보이도록 } // 내부 클래스를 이용하여 ActionListener를 한 클래스안에 2개를 넣을 수 있습니다. // 버튼이 눌렸을때 이벤트 처리 class LabelButtonListener implements ActionListener { public void actionPerformed(ActionEvent event) { label.setText("Ouch!"); // 내부 클래스에서 label 변수 사용가능 } } // close inner class class ColorButtonListener implements ActionListener { public void actionPerformed(ActionEvent event) { frame.repaint(); // 내부 클래스에서는 외부 클래스 객체에 대한 헤퍼런스 없이 // 그냥 frame 인스턴스 변수를 사용 할 수 있다. } } // close inner class } // 여기서 그림이 다시 그려지는 원리는 colorButton 이 눌리면 repaint() 매소드가 호출되고 // frame 에 들어있는 모든 위젯의 아래 paintComponent() 매소드가 호출됩니다. class MyDrawPanel extends JPanel { public void paintComponent(Graphics g) { g.fillRect(0,0,this.getWidth(), this.getHeight()); // make random colors to fill with int red = (int) (Math.random() * 255); int green = (int) (Math.random() * 255); int blue = (int) (Math.random() * 255); Color randomColor = new Color(red, green, blue); g.setColor(randomColor); g.fillOval(70,70,100,100); } }