1.JTextField
JTextField에는 사용자로부터 값을 입력받을 수 있다. 이 속성을 이용해서 계산기를 만들수 있다.
아래 예제의 계산기는 간단한 덧셈 뺄셈 정도를 하는 용도로 사용할 수 있다.
생성자에서 텍스트 필드 3개와 버튼 2개를 배치한다. Layout Manager를 사용하면 편하겠지만 지금은 setLayout(null)로 진행한다. 텍스트 필드 3개중 아래쪽 배치되는 1개는 setEditable 을 false로 한다. 색깔이 배경색이 되면서 값을 바꿀 수 없게 된다. 여기에 계산한 값을 표시할 것이다.
이벤트 구현은 ActionListener 로 구현한다. 버튼 2개에 addActionListener 를 등록한다. this는 인스턴스 자신을 말한다.(new SwingEX4) 오버라이드할 것은 ActionPerformed 메소드이다. 이벤트가 발생하면 두 텍스트필드의 현재값을 가져온다. (.getText) 이들은 String 형이다. 따라서 형변환을 해준다.
다음은 어느쪽이 눌렸는지를 알아야 한다. ActionEvent 클래스의 메소드인 e.getSource( ) 는 이벤트가 발생한 위치값을 반환한다. 위치라는 것은 어디에서 클릭이 발생했는가이다. tf1이면 텍스트필드 영역이고, bt1면 버튼을 클릭한 것이다. 여기서는 두개의 버튼만 등록했다. e.getSource == bt1 조건식으로 확인이 분기할 수 있다.
결과는 setText로 세번째 텍스트필드에 할당된다.
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
public class SwingEX4 extends JFrame implements ActionListener{
int count = 0;
Font f1;
JTextField tf1,tf2,tf3;
JButton bt1,bt2;
SwingEX4(){
f1 = new Font(\"배달의민족 도현\",Font.PLAIN,30);
//JTextField
tf1 = new JTextField();
tf1.setBounds(50,70,200,40);
tf1.setFont(f1);
tf2 = new JTextField();
tf2.setBounds(50,120,200,40);
tf2.setFont(f1);
tf3 = new JTextField(\"Answer\");
tf3.setBounds(50,190,200,40);
tf3.setEditable(false);
tf3.setFont(f1);
bt1 = new JButton(\" \");
bt1.setBounds(50, 270, 70, 50);
bt1.setFont(f1);
bt2 = new JButton(\"-\");
bt2.setBounds(160, 270, 70, 50);
bt2.setFont(f1);
// ActionListener
bt1.addActionListener(this);
bt2.addActionListener(this);
//JFrame
add(tf1);add(tf2);add(tf3);
add(bt1);add(bt2);
setTitle(\"JButton EX\");
setSize(300,400);
setLayout(null);
setVisible(true);
}
public static void main(String[] args) {
new SwingEX4();
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
String str1 = tf1.getText();
String str2 = tf2.getText();
int a = Integer.parseInt(str1);
int b = Integer.parseInt(str2);
int c = 0;
if(e.getSource() == bt1) {
c = a b;
}else if (e.getSource() == bt2) {
c = a-b;
}
String res = String.valueOf(c);
tf3.setText(res);
}
}
Swing의 코드를 좀더 정리하고 기능을 추가하면 좀더 복잡한 계산기도 만들 수 있다.
2. JTextArea
JTextArea는 텍스트에디터 처럼 여러줄에 걸쳐서 문자열을 입력받을 수 있다. JTextField 처럼 getText()로 문자열을 가져올 수 있다. 텍스트 property 인 만큼 사용법이 비슷하다. 컴포넌트들이 다 부모가 같기 때문에 어딘가 닮은 구석이 있도록 설계되었다. 아니 상속을 한 것이니까 닮은 건 당연한건가. 어쨋든 다들 인스턴스 생성하고 setBounds로 위치와 크기를 한번에 배치한다.
아래 예제에서는 String 클래스의 split을 사용하여 문자열에 있는 공백을 기준으로 단어로 쪼갠다. 즉 text란 긴 문자열을 word라는 객체배열(문자열 배열)로 분리해서 저장시킨다. 과정은 아래의 그림과 같다.
public class SwingEX6 extends JFrame{
int count = 0;
Font f1;
SwingEX6(){
f1 = new Font(\"바탕\",Font.BOLD,17);
//JLabel
JLabel lb1 = new JLabel(\"단어 :\");
lb1.setBounds(50,35,100,30);
lb1.setFont(f1);
//JLabel
JLabel lb2 = new JLabel(\"문자 :\");
lb2.setBounds(150,35,100,30);
lb2.setFont(f1);
// JTextArea
JTextArea jt1 = new JTextArea();
jt1.setBounds(50, 75, 200, 200);
jt1.setFont(f1);
// JButton
JButton bt1 = new JButton(\"Count\");
bt1.setBounds(50, 300, 100, 30);
bt1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String text = jt1.getText();
String words[] =text.split(\"\\\\s\");
lb1.setText(\"단어 :\" words.length);
lb2.setText(\"문자 :\" text.length());
}
});
add(jt1);add(lb1);add(lb2);add(bt1);
setTitle(\"JButton EX\");
setSize(320,400);
setLayout(null);
setVisible(true);
}
public static void main(String[] args) {
new SwingEX6();
}
}
요새는 웹을 거의 쓰기 때문에 이런 GUI가 오히려 생소해졌다. 그래도 혹시 나중에 라도 쓸 일이 있을지 모르니까 기록해둔다.
相关推荐
자바 튜토리얼 (10-1) Java Swing JFrame 윈도우창 만들기
자바 튜토리얼 (10-2) Java Swing JButton, JLabel
자바 튜토리얼 (10-4) Java Swing | 로그인창 예제,JPasswordField
자바 튜토리얼 (10-9) Java Swing | JCheckBox, JRadioButton, JTable 등의 컴포넌트 (Swing Tutorial 종료)
자바 튜토리얼 (9-3) 인터페이스 다중 구현, 상속
Calendar 클래스 예제 1 | 자바 JDK | 날짜와 시간 사용하기
Calendar 클래스 예제 2 | 자바 JDK | 두 날짜간 연산 한글요일
Calendar 클래스 예제 3 | 자바 JDK | 시간을 연산, 시분초 단위로
最新评论
嗨,这是一条评论。 要开始审核、编辑及删除评论,请访问仪表盘的“评论”页面。 评论者头像来自Gravatar。