GUI 깔끔하게 만들어보기
2023. 7. 25. 12:43ㆍJAVA
보통 한 클래스에 컴포넌트를 만들고 추가하면 나중에 컴포넌트가 많아지면 난잡해질 수 있음
그래서 다른 클래스를 만들어 기능을 설계하고 메인에는 객체 생성만 해주면 깔끔하게 만들 수 있음
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class MainFrame extends JFrame{
//화면에 보이는 컴포넌트들의 참조변수를 멤버변수르(Field:필드)로 만들기
JButton btn;
JLabel label;
int num=0;
public MainFrame() {
// TODO Auto-generated constructor stub
setTitle("Button Click Event");
setSize(400, 450);
setDefaultCloseOperation(EXIT_ON_CLOSE);
//간단하게 옆으로 배치되도록.
setLayout(new FlowLayout());
// 버튼 클릭하여 Label 글씨 변경해보기
// Button과 Label 컴포넌트 1개씩 추가
//JButton btn; //지역변수로 컴포넌트를 참조하는 것은 권장하지 않음
// 컴포넌트들의 참조변수는 가급적 멤버변수에 만들것을 권장함.
btn= new JButton("button");
label= new JLabel("Hello world");
//프레임에 붙이기
this.add(btn);
add(label);
// 버튼 클릭 상황(이벤트)가 발생했을때 반응하기..
// 버튼의 클릭 이벤트를 감시하며 듣는 리스너(스토커)객체 생성 및 버튼에 붙이기
//ActionListener listener = new ActionListener(); //error - 인터페이스는 직접 객체 생성이 불가능
// 인터페이스를 구현한(implements) 새로운 클래스를 설계하고 객체로 생성하여 사용
ClickListener listener= new ClickListener();
// 버튼에게 리스너를 추가하기
btn.addActionListener(listener);
setVisible(true);
}// 생성자...
// inner class.. 이너클래스//////////////////////////
// 이너클래스의 특징. 아웃터클래스의 멤버를 내것인양 사용이 가능함.
class ClickListener implements ActionListener{
//버튼이 클릭되면 자동으로 실행되는 메소드 : call back method(콜백 메소드)
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
num++;
label.setText("Nice to meet you. : " + num);
}
}////////////////////////////////////////
}//MainFrame class..
컴포넌트들의 참조변수는 멤버변수로 선언하는것이 좋음
어떤 이벤트가 발생했을때 자동으로 실행되는 메소드를 call back method(콜백 메소드)라고 함
public class Main3 {
public static void main(String[] args) {
// TODO Auto-generated method stub
new MainFrame();
}
}
메인클래스는 깔끔한것을 볼 수 있음
'JAVA' 카테고리의 다른 글
| GUI(그래픽 유저 인터페이스) (0) | 2023.07.25 |
|---|---|
| 네트워크 통신 - Client (0) | 2023.07.21 |
| 네트워크 통신 - Server (0) | 2023.07.21 |
| FileOutput(파일 출력) (0) | 2023.07.20 |
| FileInput(파일 입력) (0) | 2023.07.20 |