Fairy ' s
[JFrame] JFrame 이란? / 기초 예제 구현 본문
예제에 대한 설명은 기존 코드를 작성해주신 선생님께서 대부분 주석으로 표기해 두었지만,
개인적으로 모르는 부분들을 따로 정리해두었습니다.
JFrame 이란?
- Java Swing 클래스의 일부이며, 구현되는 하나의 창이다.
- Swing은 자바에서 그래픽 사용자 인터페이스를 구현하기 위해 제공되는 클래스이다.
- 버튼, 창, 표, 트리 등의 컴포넌트들을 이용할 수 있다.
예제 1 // 참고
// 메인 UI의 TextField에 내용을 입력하고 전송 버튼을 누를 시 새로운 팝업 화면에 그 메시지 내용이 노출
// 메인 UI의 삭제 버튼을 누를 시 TextField에 빈 문자열을 넣어주어 내용을 삭제시킴
// import 생략
public class ExSwing extends JFrame implements ActionListener {
// TextField 정의하기
private JTextField inputMsg;
// 생성자
public ExSwing() {
setSize(800, 500);
setLocation(100, 100);
setDefaultCloseOperation(EXIT_ON_CLOSE);
//FlowLayout 객체 전달하기
setLayout(new FlowLayout());
// 문자열을 입력할수 있는 UI
inputMsg=new JTextField(10);
// 전송버튼
JButton sendBtn=new JButton("전송");
sendBtn.setActionCommand("send");
sendBtn.addActionListener(this);
add(sendBtn);
// 삭제버튼
JButton deleteBtn = new JButton("삭제");
deleteBtn.setActionCommand("delete");
deleteBtn.addActionListener(this);
// 패널 객체를 생성해서
JPanel panel = new JPanel();
// 패널에 UI를 추가하고
panel.add(inputMsg);
panel.add(sendBtn);
panel.add(deleteBtn);
//패널 통채로 프레임에 추가하기
add(panel);
setVisible(true);
}
public static void main(String[] args) {
new ExSwing();
}
@Override
public void actionPerformed(ActionEvent e) {
// 이벤트가 발생한 버튼에 설정된 action command 읽어오기
String command=e.getActionCommand();
if(command.equals("send")) {
// JTextField에 입력한 문자열 읽어오기
String msg = inputMsg.getText();
JOptionPane.showMessageDialog(this, msg);
}else if (command.equals("delete")) {
// 빈 문자열을 넣어주어서 삭제하기
inputMsg.setText("");
}
}
}
- 버튼 기능 구현
ActionListener 인터페이스 implements / setActionCommand 지정 / actionPerformance에서 command에 따라 기능 구현 - setDefaultCloseOperation(EXIT_ON_CLOSE) : 기존에 존재하는 닫기 표시를 누르면 창이 닫히는 것으로 보이지만
아직 프로세스가 가동중이고, 이를 남겨두면 메모리를 많이 차지하게 된다. 이 메서드를 사용하면 윈도우창 종료 시
프로세스까지 깔끔하게 닫을 수 있다. - FlowLayout : 배치 관리자
배치 관리자 종류
- FlowLayout : 왼쪽에서 오른쪽으로 배치, 오른쪽 공간이 없으면 아래로 자동 배치
ex ) // FlowLayout(FlowLayout.LEFT, 10, 20); // 왼쪽 정렬, 좌우간격 10, 상하간격 20 - BorderLayout : 동, 서, 남, 북, 중앙 5개의 영역으로 나눠준다.
ex ) BorderLayout(30, 20); // 좌우 30, 상하 20 - GridLayout : 2차원 그리드로서 n x n 으로 설정해주며 왼쪽에서 오른쪽, 위에서 아래 순으로 배치
ex ) // GridLayout(4, 3, 5, 50); // 4 x 3 그리드에서 좌우간격 5, 상하간격 5 - CardLayout : 컴포넌트를 포개어 배치
- Null : 레이아웃을 쓰지 않고 각 컴포넌트마다 수동으로 위치 설정을 해 줄 때마다 사용한다.
예제 2
// TextField에 내용을 입력하고 추가 버튼을 누르면 JList에 추가됨 (엔터키를 눌러도 추가)
// 삭제하고 싶은 내용을 선택 후 삭제를 누르면 삭제시킴
// import 생략
public class ExSwing extends JFrame implements ActionListener, KeyListener{
// 필요한 필드 정의하기
private JTextField inputName;
private DefaultListModel<String> model;
private JList jList;
// 생성자
public ExSwing() {
setSize(800, 500);
setLocation(100, 100);
setDefaultCloseOperation(EXIT_ON_CLOSE);
// BorderLayout 객체 전달하기
setLayout(new BorderLayout());
// 페널에 추가할 UI 를 미리 만든다.
JLabel label=new JLabel("추가할 이름입력");
inputName=new JTextField(10);
JButton addBtn=new JButton("추가");
addBtn.setActionCommand("add");
addBtn.addActionListener(this);
// 삭제 버튼
JButton deleteBtn=new JButton("삭제");
deleteBtn.setActionCommand("delete");
deleteBtn.addActionListener(this);
// 패널에 UI 를 추가하고
JPanel topPanel=new JPanel();
topPanel.add(label);
topPanel.add(inputName);
topPanel.add(addBtn);
topPanel.add(deleteBtn);
// 패널째로 프레임의 상단에 추가하기
add(topPanel, BorderLayout.NORTH);
// 목록을 출력할 UI
jList=new JList<>();
//JList 에 출력할 데이터를 가지고 있는 모델 객체
model=new DefaultListModel<>();
model.addElement("안녕하세요");
model.addElement("자바");
model.addElement("어려워요");
//모델을 JList 에 연결하기
jList.setModel(model);
// 스크롤 페널에 JList 넣어주기
JScrollPane sc=new JScrollPane(jList,
JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
// 프레임에 스크롤 페널 추가하기
add(sc, BorderLayout.CENTER);
// JTextField 에 키 리스너 등록하기
inputName.addKeyListener(this);
setVisible(true);
}
// run 했을때 실행순서가 시작되는 main 메소드
public static void main(String[] args) {
new ExSwing();
}
// ActionListener 인터페이스를 구현해서 강제로 Override 한 메소드
@Override
public void actionPerformed(ActionEvent e) {
//이벤트가 발생한 버튼에 설정된 action command 읽어오기
String command=e.getActionCommand();
if(command.equals("add")) {
//JTextField 에 입력한 문자열을 읽어와서 DefaultListModel 객체에 추가해야 한다.
String name=inputName.getText();
model.addElement(name);
inputName.setText("");
}else if(command.equals("delete")) {
//JList 의 메소드를 이용해서 선택된 행을 알아낸다.
int index=jList.getSelectedIndex();
//만일 선택된 인덱스가 있다면
if(index >= 0) {
//모델에서 해당 인덱스를 삭제한다.
model.remove(index);
}
}
}
@ Override
public void keyPressed(KeyEvent e) {
//눌러진 키의 코드값을 읽어와서
int code=e.getKeyCode();
// 엔터키의 코드값인지 확인한다.
if(code == KeyEvent.VK_ENTER) { //만일 엔터키를 눌렀다면
//
JTextField 에 입력한 문자열을 읽어와서 DefaultListModel 객체에 추가해야 한다.
String name=inputName.getText();
model.addElement(name);
inputName.setText("");
}
}
@Override
public void keyReleased(KeyEvent e) {
//System.out.println("keyReleased");
}
@Override
public void keyTyped(KeyEvent e) {
// System.out.println("keyTyped");
}
}
- JScrollPane : vertical은 세로, horizontal은 가로 스크롤 / AS_NEEDED - 스크롤이 필요할 때 생성, ALWAYS - 항상 유지
- KeyListener 인터페이스 implements / keyPressed, keyReleased, keyType 오버라이드
- DefaultListModel에 데이터를 넣고, JList에 담음
- addElement(String element) : 지정한 요소를 목록 끝에 추가
- addKeyListener(KeyListener I) : 키 리스너 등록
- keyPressed(KeyEvent e) : 키를 누르면 호출
- keyReleased(KeyEvent e) : 키가 릴리스되면 호출
- keyTyped(KeyEvent e) : 키를 입력하면 호출
'Study > JAVA' 카테고리의 다른 글
[JAVA] Exception / try ~ catch (0) | 2023.01.11 |
---|---|
[JAVA] Wrapper Class ? (0) | 2023.01.11 |
[JAVA] Generics Class ? (0) | 2023.01.10 |
[JAVA] ArrayList ? (0) | 2023.01.10 |
[JAVA] HashMap / HashSet? (0) | 2023.01.10 |
Comments