티스토리 뷰
Programming Tips/JAVA
[JAVA] Swing으로 GUI 인터페이스 만들기 - 기본 (JFrame, JButton, JTextField, JLabel, JCheckbox)
Unikys 2012. 3. 3. 03:49
0. 환경 : 이클립스+JAVA 6을 이용해서 코딩한다.
- 지금 이 GUI 인터페이스를 만드는 목적은 지속적으로 이벤트(메세지)를 발생시키는 프로그램을 만들기 위한 기본 인터페이스를 구축하기 위함이다.
- 함수 설명 안에 있는 링크들은 작동하지 않는다.
1. 시작
- 프로젝트를 만든다
- 기본 gui로 사용할 클래스를 만든다. JFrame을 상속받아야한다.
- class EventFireGui extends JFrame
import javax.swing.JFrame;
public class EventFireGui extends JFrame {
}
public class EventFireGui extends JFrame {
}
- 실행할 static main을 포함할 클래스를 만든다. (EventFireGui를 써도 된다)
public class EventFireStarter {
public static void main(String[] args) {
new EventFireGui();
}
}
public static void main(String[] args) {
new EventFireGui();
}
}
2. 기본 설정을 한다.
import javax.swing.JFrame;
public class EventFireGui extends JFrame {
private static final long serialVersionUID = -711163588504124217L;
public EventFireGui() {
super("Event Firer");
setBounds(100 , 100 , 300 , 200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
}
public class EventFireGui extends JFrame {
private static final long serialVersionUID = -711163588504124217L;
public EventFireGui() {
super("Event Firer");
setBounds(100 , 100 , 300 , 200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
}
- void java.awt.Window.setBounds(int x , int y , intn width , int height) : 위치와 크기를 설정.
- void javax.swing.JFrame.setDefaultCloseOperation(int operation) : 닫기 버튼 눌렀을때 어떻게 할지 설정.
- void java.awt.Window.setVisible(boolean b) : 보일지 말지 설정
3. Panel을 넣고 그 안에 버튼을 넣는다.
import java.awt.Container;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class EventFireGui extends JFrame {
private static final long serialVersionUID = -711163588504124217L;
public EventFireGui() {
super("Event Firer");
setBounds(100 , 100 , 300 , 200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container contentPane = this.getContentPane();
JPanel pane = new JPanel();
JButton buttonStart = new JButton("Start");
buttonStart.setMnemonic('S');
pane.add(buttonStart);
contentPane.add(pane);
setVisible(true);
}
}
- void javax.swing.AbstractButton.setMnemonic(char mnemonnic) : 단축키를 설정
4. Label과 text field를 넣는다.
import java.awt.Container;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class EventFireGui extends JFrame {
private static final long serialVersionUID = -711163588504124217L;
public EventFireGui() {
super("Event Firer");
setBounds(100 , 100 , 300 , 200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container contentPane = this.getContentPane();
JPanel pane = new JPanel();
JButton buttonStart = new JButton("Start");
JTextField textPeriod = new JTextField(5);
JLabel labelPeriod = new JLabel("Input period : ");
buttonStart.setMnemonic('S');
pane.add(buttonStart);
pane.add(labelPeriod);
pane.add(textPeriod);
contentPane.add(pane);
setVisible(true);
}
}
4. Check box를 추가하고 이벤트를 넣는다.
- 체크박스가 체크되면 텍스트 입력을 비활성화하고 텍스트를 설정한다. 체크를 없애면 다시 활성화한다.
- 이벤트 함수를 설정하는 곳의 인자에서 바로 new 로 리스너를 추가하는 경우 지역 변수를 접근하려면 final로 바꿔줘야한다. 대안으로 JTextField변수를 클래스의 멤버 변수로 빼주는 방법이 있다. (개인적으로는 다른 함수에서도 자주 사용하는 값이면 멤버 변수로 빼주는거 선호.)
import java.awt.Container;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class EventFireGui extends JFrame {
private static final long serialVersionUID = -711163588504124217L;
public EventFireGui() {
super("Event Firer");
setBounds(100 , 100 , 300 , 200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container contentPane = this.getContentPane();
JPanel pane = new JPanel();
JButton buttonStart = new JButton("Start");
final JTextField textPeriod = new JTextField(5);
JLabel labelPeriod = new JLabel("Input period : ");
JCheckBox checkboxIsRandom = new JCheckBox("Fire randomly");
checkboxIsRandom.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
if(((JCheckBox)e.getSource()).isSelected())
{
textPeriod.setText("Random");
textPeriod.setEnabled(false);
}else
{
textPeriod.setText("");
textPeriod.setEnabled(true);
}
}
});
buttonStart.setMnemonic('S');
pane.add(buttonStart);
pane.add(labelPeriod);
pane.add(textPeriod);
pane.add(checkboxIsRandom);
contentPane.add(pane);
setVisible(true);
}
}
- void javax.swing.AbstractButton.addChangeListener(ChangeListener l) : 상태가 변하면 처리할 리스너를 추가
- Object java.util.EventObject.getSource() : 이벤트가 일어난 개체를 리턴
- boolean javax.swing.AbstractButton.isSelected() : 체크박스가 체크 되었는지 여부를 리턴
- void javax.swing.text.JTextComponent.setText(String t) : 텍스트 필드의 값을 설정
- void javax.swing.JComponent.setEnabled(boolean enabled) : 개체의 활성/비활성를 설정
끝.
- 다음에는 레이아웃에 대하여 알아보자.
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- php
- gae
- lecture
- c++
- mini project
- GX-10
- java
- 삼식이
- TIP
- ny-school
- 강좌
- 서울
- Android
- HTML5 튜토리얼
- Python
- 안드로이드
- 샷
- 자바스크립트
- 속깊은 자바스크립트 강좌
- 탐론 17-50
- google app engine
- Javascript
- HTML5
- 사진
- 뽐뿌
- 팁
- 안드로이드 앱 개발 기초
- gre
- K100D
- Writing
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함