1. 과제 안내문
첫번째 윈도우에서 이름을 입력하고 전공을 선택한 후 Go 버튼을 누르면 새로운 창에서 앞서 입력한 이름과 선택한 전공을 보여 주는 GUI 프로그램을 작성하라. 7장의 로그인 예제를 참고하라.
역시 이번에도 GUI를 구성하는 문제였다. 취향차이인지는 모르겠지만 나에게는 많이 번거롭게 느껴진다 ㅠㅠ 일단 실행결과를 보자.
2. 예시 실행 결과
그림을 보면 알겠지만 Event Listener를 사용하는 과제이다. 약간 신경써야 할 부분은 창이 바뀌는 부분인데, 이것은 저번 과제처럼 창의 내용을 전부 지우고 새로운 컨테이너를 출력해주면 된다. 다음은 코드의 과정이다.
3. 코드 작성
- 프레임 구성
일단 프레임을 먼저 구성해야 했다. 사실 이 과제에서 가장 오래걸린 부분이 프레임이다. (그렇다고 리스너 동작 구성이 쉽다는 것은 아니다. 그냥 내가 프레임을 못한다 ㅎㅎ) 다음은 프레임을 구성한 코드이다.
public GetInfoFrame(){
setTitle("전공선택");
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLayout(new GridLayout(0,1));
JPanel panel1 = new JPanel();
JPanel panel2 = new JPanel();
JPanel panel3 = new JPanel();
GetInfoListener listener = new GetInfoListener();
JLabel infoLabel = new JLabel("이름과 전공을 선택하시오.",JLabel.CENTER);
infoLabel.setFont(new Font("궁서체", Font.BOLD, 15));
infoLabel.setForeground(Color.blue);
JLabel name = new JLabel("이름",JLabel.LEFT);
nameText = new TextField(15);
JLabel major = new JLabel("전공",JLabel.LEFT);
rb1 = new JRadioButton("소프트웨어");
rb2 = new JRadioButton("가상현실");
group = new ButtonGroup();
group.add(rb1);
group.add(rb2);
goBtn = new JButton("Go");
goBtn.addActionListener(listener);
rb1.addActionListener(listener);
rb2.addActionListener(listener);
panel1.add(name);
panel1.add(nameText);
panel2.add(major);
panel2.add(rb1);
panel2.add(rb2);
panel3.add(new JLabel());
panel3.add(goBtn);
panel3.add(new JLabel());
Container cPane = getContentPane();
cPane.add(infoLabel);
cPane.add(panel1);
cPane.add(panel2);
cPane.add(panel3);
pack();
}
- 리스너 구성
예시 결과를 알겠지만 프레임의 구성이 조금 뒤죽 박죽이다. 첫째줄에는 레이블 한개와 두번째 줄은 레이블 한개, 텍스트 필드 하나, 이런식으로 구성되어 있기에, 그냥 줄마나 패널을 만들어 이 패널을 추가해주는 방법을 선택하였다. 분명 좋은 방법이 있겠지만 이것이 나의 한계였다 ㅠㅠ 다음은 리스너 코드이다.
public class GetInfoListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource() == goBtn) {
String name = nameText.getText();
String major;
if(rb1.isSelected()) {
major = "소프트웨어";
}else {
major = "가상현실";
}
(new ShowResultFrame(name,major)).setVisible(true);
dispose();
}
}
}
public static void main(String[] args) {
(new GetInfoFrame()).setVisible(true);
}
리스너 클래스의 동작은 의외로 간단하다. 조금 주목해야 할 부분은 바로 새로 출력될 프레임에 이름과 전공의 값들을 넣어준다는 것이다. 그럼 마지막으로 새로 출력될 화면의 프레임이다.
import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class ShowResultFrame extends JFrame{
public ShowResultFrame(String name, String major) {
setTitle("전공선택결과");
setDefaultCloseOperation(EXIT_ON_CLOSE);
JLabel infoLabel = new JLabel(name + "님은 " + major + "전공입니다.",JLabel.CENTER);
infoLabel.setFont(new Font("궁서체", Font.BOLD, 20));
infoLabel.setForeground(Color.red);
Container container = getContentPane();
//container.setLayout(new GridLayout(0,1));
container.setLayout(new FlowLayout());
container.add(infoLabel);
//container.add(new JLabel());
pack();
}
}
주석으로 처리된 부분은 무시해도 된다! 이부분은 간단하기 때문에 그렇게 많은 시간이 걸리지 않았다.
3. 결어
핑계로 들릴 수도 있겠지만, java과제 포스팅이 너무 늦어졌다 ㅠㅠ 시험도 있었고 여러 바쁜 일들이 겹쳐져 있었다. (심 지어 이 글을 올리는 지금은 13주차 과제를 풀고있었다.) 그래도 꾸준히 올린다는 것에 의의를 두고 계속 올릴 것이다!
'대학교 과제 > Java [ 2 - 1 ]' 카테고리의 다른 글
[Java 과제] - 12주차 ( Arrays.sort() ) (0) | 2020.06.02 |
---|---|
Java 10주차 과제 - 상속 (0) | 2020.05.13 |
Java 9주차 과제 - JFrame, ActionListener (0) | 2020.05.04 |