GUI 깔끔하게 만들어보기

2023. 7. 25. 12:43JAVA

보통 한 클래스에 컴포넌트를 만들고 추가하면 나중에 컴포넌트가 많아지면 난잡해질 수 있음

 

그래서 다른 클래스를 만들어 기능을 설계하고 메인에는 객체 생성만 해주면 깔끔하게 만들 수 있음

 

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