Button 5개 생성하여 동, 서, 남, 북, 중앙으로 배치하는 코드 작성하기
import java.awt.BorderLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
class MyLayout extends JFrame{ //JFrame 상속받기
JButton button1; //JButton 타입으로하고, 변수명을 button1로 선언함.
JButton button2;
JButton button3;
JButton button4;
JButton button5;
public MyLayout() {
initData();
setInitLayout();
}
private void initData() {
this.setTitle("Button 위치 설정하기!!"); //제목 설정.
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //창 닫기 버튼 클릭 시, 창이 닫히게 함.
this.setSize(500, 500); //창 크기 설정.
button1 = new JButton("button1"); //객체 생성 및 버튼 text설정.
button2 = new JButton("button2");
button3 = new JButton("button3");
button4 = new JButton("button4");
button5 = new JButton("button5");
}
private void setInitLayout() {
this.setVisible(true); //true값을 넣어야 실행 시 창이 표시됨.
this.setLayout(new BorderLayout()); //setLayout을 선언해야 버튼이 창에 표시됨.
//new하는 Layout은 다르게 설정할 수 있음.
//BorderLayout, GridLayout, NoLayout 등등..
this.add(button1, BorderLayout.WEST); //버튼을 창에 추가하여 위치를 설정
this.add(button2, BorderLayout.EAST);
this.add(button3, BorderLayout.SOUTH);
this.add(button4, BorderLayout.NORTH);
this.add(button5, BorderLayout.CENTER);
}
}
//////////////////////구분선///////////////////////////
public class BorderLayoutEx1 {
public static void main(String[] args) {
new MyLayout(); //메인 메소드에서 MyLayout 클래스 실행.
//이 코드가 없으면 true값을 넣어도 창이 뜨지 않음.
}
}
- JFrame을 상속받고, ActionListener를 인터페이스로 선언하여 버튼을 추가하고 클릭 이벤트를 줌
- initData 메소드를 선언하여 button 객체를 생성하고, 버튼의 이름을 설정함
- setInitLayout 메소드를 선언하여 버튼을 화면에 추가하고, 위치를 설정함
클릭 이벤트 추가
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
class MyLayout extends JFrame implements ActionListener {
JButton button1;
JButton button2;
JButton button3;
JButton button4;
JButton button5;
public MyLayout() {
initData();
setInitLayout();
addEventListener();
}
private void initData() {
this.setTitle("Button 위치 설정하기!!");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(500, 500);
button1 = new JButton("button1");
button2 = new JButton("button2");
button3 = new JButton("button3");
button4 = new JButton("button4");
button5 = new JButton("button5");
}
private void setInitLayout() {
this.setVisible(true);
this.setLayout(new BorderLayout());
this.add(button1, BorderLayout.WEST);
this.add(button2, BorderLayout.EAST);
this.add(button3, BorderLayout.SOUTH);
this.add(button4, BorderLayout.NORTH);
this.add(button5, BorderLayout.CENTER);
}
private void addEventListener() {
button1.addActionListener(this); //버튼에서 일어나는 이벤트를 감지하는 코드
button2.addActionListener(this);
button3.addActionListener(this);
button4.addActionListener(this);
button5.addActionListener(this);
}
@Override
public void actionPerformed(ActionEvent e) {
JButton targetButton = (JButton) e.getSource();
//targetButton 변수를 선언하여 클릭되는 버튼을 변수에 대입
//여기서 다운캐스팅이 일어남.
//getSoutce는 object 타입(최상위 타입)이기 때문에 JButton 타입 변수에 대입하기 위해 다운캐스팅이 필요함.
String text = targetButton.getText(); //버튼의 text(이름)를 String 변수에 넣어줌.
if (text.equals(button1.getText())) {
System.out.println(text + "을 클릭함!!");
} else if (text.equals(button2.getText())) {
System.out.println(text + "을 클릭함!!");
} else if (text.equals(button3.getText())) {
System.out.println(text + "을 클릭함!!");
} else if (text.equals(button4.getText())) {
System.out.println(text + "을 클릭함!!");
} else
System.out.println(text + "을 클릭함!!");
//버튼의 text(이름)와 각각 버튼의 명이 같을 경우 콘솔창에 출력하는 조건문
}
}
///////////////////////구분선/////////////////////////////
public class BorderLayoutEx1 {
public static void main(String[] args) {
new MyLayout();
}
}
- JFrame을 상속받고, ActionListener를 인터페이스로 선언하여 버튼을 추가하고 클릭 이벤트를 줌
- initData 메소드를 선언하여 button 객체를 생성하고, 버튼의 이름을 설정함
- setInitLayout 메소드를 선언하여 버튼을 화면에 추가하고, 위치를 설정함
- addEventListener 메소드를 선언하여 버튼 클릭을 감지함
- actionPerformed 메소드를 오버 라이딩하여 버튼을 클릭할 때마다 콘솔 창에 버튼 이름을 출력함
각 코드마다 자세한 설명은 코드 주석을 읽어주세요! 제가 공부하는 방식 그대로 설명해서 이해하기 힘든 부분도 있을 것 같습니다...
감사합니다!
2021.07.14
'JAVA > GUI' 카테고리의 다른 글
[자바] 콜백(CallBack) - JFrame (0) | 2021.07.19 |
---|---|
[자바] JFrame 이미지 추가하기 - 슈퍼마리오(1) (0) | 2021.07.17 |
[자바] KeyListener (0) | 2021.07.15 |
[자바] JPanel (0) | 2021.07.15 |
[자바] Login 화면 구성하기 (0) | 2021.07.13 |