버튼을 클릭하면 새로운 윈도우 창이 나오는 프로그램이다.
다음과 같이 메인 함수를 만들어주고
public class Main {
public static void main(String[] args) {
LaunchPage launchPage = new LaunchPage();
}
}
처음 화면을 실행하면 LaunchPage가 나타난다. LaunchPage는 버튼이 있는 페이지이다.
public class LaunchPage implements ActionListener {
//components
JFrame frame = new JFrame();
JButton myButton = new JButton("Hello duckky");
LaunchPage() {
myButton.setBounds(100, 160, 200, 40);
myButton.setFocusable(false);
myButton.addActionListener(this);
frame.setSize(420,420);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(null);
frame.setVisible(true);
frame.add(myButton);
}
클래스의 생성자 위에 JFrame와 JButton을 만든다. 이렇게 외부에서 객체를 사용할 수 있게끔 코드를 작성하면 좋다.
버튼에는 addActionListener() 키워드로 액션리스너를 단다.
ActionListener란 버튼을 클릭했을때 이벤트를 발생할 수 있도록 만들어주는 것이다.
myButton.addActionListener(this);
- extends
- 부모에서 선언/정의를 모두하며, 자식은 오버라이딩 할 필요 없이 부모의 메소드/변수를 그대로 사용할 수 있다.
- 부모의 특징을 확장해서 사용한다.
- implements (interface 구현)
- 부모 객체는 선언만 하며, 정의는 반드시 자식이 오버라이딩해서 사용한다. 즉, 껍데기만 존재
- 반드시 구현해야 하는 메소드가 존재한다.
클래스를 만들때 ActionListener를 implements 했기 때문에
반드시 actionPerformed()이라는 메소드를 구현해야 한다.
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource() == myButton) {
// frame.dispose(); //새로운 페이지가 나타날때 기존 페이지를 삭제
NewWindow myWindow = new NewWindow();
}
}
만약 버튼을 클릭하면 새로운 창인 NewWindow 가 나타나게 된다.
NewWindow 클래스는 프레임과 레이블, 아이콘으로 구성되어 있는 클래스이다.
public class NewWindow {
JFrame frame = new JFrame();
JLabel label = new JLabel("Hello");
ImageIcon icon = new ImageIcon("duck.png");
NewWindow() {
label.setBounds(0, 0, 300, 300);
label.setFont(new Font("Serif", Font.PLAIN, 30));
label.setIcon(icon);
frame.add(label);
frame.setSize(420,420);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(null);
frame.setVisible(true);
}
}
메인 함수를 실행하면 연결된 LaunchPage가 나타나고
안에 있는 버튼을 클릭하면 연결된 NewWindow 페이지가 나타난다.
참고로 새로운 페이지가 나타날 때 기존 페이지를 삭제하고 싶다면 dispose() 메소드를 프레임에 적용하면 된다.
'Today I Learned' 카테고리의 다른 글
자바 GUI 기초 - JOptionPane (0) | 2022.11.06 |
---|---|
자바 GUI 기초 - JButton (0) | 2022.11.06 |
JAVA LayoutManager(배치관리자) : FlowLayout, GridLayout (0) | 2022.11.05 |
JAVA LayoutManager(배치관리자) : BorderLayout (0) | 2022.11.05 |
자바 GUI 기초 - JFrame, JLabel, JPanel (0) | 2022.10.29 |