-
Java GUI에는 awt, swing이 있다. 자바 패키지 내의 Java.awt/Javax.swing
-
Java.awt-프레임 위에 버튼을 만들고 이름적는 칸 만들기 (PannelTest)
-
처리방식
-
컴포넌트(버튼)를 만들고 이벤트 핸들러 (이벤트 처리 메소드)를 만들어서 연결시켜줘야한다.
-
컴포넌트를 보여줄땐 컨테이너가 필요하다. 컨테이너로는 Frame, JFrame을 가장 많이 쓴다. 컨테이너에 컴포넌트를 부착시키는 형태인 것이다.
-
따라서 Frame을 만들어서 Button을 올려야한다.
-
extend Frame
-
컨테이너는 상속받아서 쓴다. 현재 작업 중인 클래스에 extend Frame을 하여 상속받는다.
-
Frame에 제목 나타내기
-
super("제목") / setTitle("제목")을 통해 실행시 팝업되는 Frame의 제목을 붙일 수 있다.
-
Frame의 크기를 정하는 메소드는 setSize(가로, 세로)이다.
-
Frame을 나타내는 메소드는 setVisible(ture/false)이다.
-
Frame에 버튼 부착
-
add(버튼 클래스의 객체) 메소드를 이용하여 Frame에 버튼 객체들을 얹는다.
-
add()메소드를 여러개 쓰면 그 전에 쓴 버튼들은 나오지 않는다. 어떻게 보여줄 수 있을까?
-
버튼 위치 정하기
-
컴포넌트의 위치를 정할때에는 배치관리자를 사용한다. 배치관리자에는 BoardLayout이 있다.
-
setLayout이라는 메소드의 인자로 차례대로 배치하는 FlowLayout을 이용한다.
-
버튼을 눌렀을때 이벤트가 발생
-
ActionListener라는 Interface에는 actionPerformed라는 메소드가 있다.
-
작업중인 클래스에 ActionListener를 implements시켜준다.
-
버튼이 눌러지는 이벤트를 발생시키려면 actionPerformed 메소드에 ActionEvent를 매개변수로 구현한다. (체크박스는 ItemEvent)
-
버튼의 글자를 String으로 알려주기 위해 String형 객체를 선언하고 ActionEvent의 객체에 getActionCommand()메소드를 실행한다.
-
버튼 들을 눌렀을때 각기 다른 출력문을 정할 수도 있고, setBackground(Color.컬러명)을 통해 Frame바탕의 색상을 변화시킬 수도 있다.
-
출력문과 버튼을 연결하기 위해서는 버튼객체에 addActionListener메소드를 구현한다. 자신이 속한 클래스를 가리키는 this를 인자로 이용한다.
-
텍스트 칸 만들기
-
텍스트 칸은 TextField을 이용한다. 생성자 내부에 TextField 객체 tf1을 만들면 actionPerformed메소드에서 사용하지 못하므로 생성자 바깥에 써서 전역변수로 선언한다.
-
TextField객체로 마찬가지로 add()메소드를 이용하여 Frame에 얹는다.
-
TextField에 쓴 입력내용을 콘솔창에 출력하기
-
actionPerformed메소드 내에서 tf1.getText()메소드를 이용한다.
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
package guiTest;
import java.awt.Button;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class PannelTest extends Frame implements ActionListener{
TextField tf1;
public PannelTest() {
//super("GUI Test"); //frame의 제목
setTitle("GUI Test"); //제목 붙이는 명령어
Button b1=new Button("버튼1");
Button b2=new Button("버튼2");
Button b3=new Button("버튼3");
tf1=new TextField(20); //이름 적는 칸 만들기. 생성자의 인자값으로 크기지정
setLayout(new FlowLayout()); //FlowLayout:차례로 놓여지게함
add(b1); //frame에 b1을 얹는다.
add(b2); //버튼 1은 안나오고 버튼 2만 나옴
add(b3);
add(tf1);
setSize(300,400); //frame의 크기를 300x400
setVisible(true); //frame을 보여달라
b1.addActionListener(this); //actionPerformed가 있는 위치를 가리킴. 같은 클래스 이므로 자기자신=this.
b2.addActionListener(this);
b3.addActionListener(this);
}
public void actionPerformed(ActionEvent e) {
String str=e.getActionCommand(); //버튼의 글자를 String형으로 알려줌
if(str.equals("버튼1")) {
System.out.println("버튼 1 이벤트 발생"); //이 이벤트를 누가 부를까? 버튼 1이 부른다고 할때 어떻게 연결할까?
setBackground(Color.yellow);
System.out.println(tf1.getText());
}else if(str.equals("버튼2")) {
System.out.println("버튼 2 이벤트 발생");
setBackground(Color.BLUE);
}else {
System.out.println("버튼 3 이벤트 발생");
setBackground(Color.pink);
}
}
public static void main(String[] args) {
new PannelTest();
}
}
|
-
Javax.swing-프레임 위에 버튼을 만들고 이름적는 칸 만들기 (JpannelTest)
-
JFrame상속받기
-
extends JFrame으로 JFrame을 상속받는다.
-
JFrame은 X버튼을 누르면 닫힌다.
-
Swing은 자바 컴포넌트로 만들어진다.
-
이벤트가 발생하도록 메소드 만들기
-
actionPerformed메소드를 만들고 작업중인 클래스에 ActionListener를 implements시켜준다.
-
actionPerformed메소드는 ActionEvent를 매개변수로 이용한다.
-
버튼의 글자를 getActionCommand()로 String형으로 알려준다.
-
버튼 생성
-
버튼 생성은 JButton 클래스를 이용한다. add()메소드로 Frame에 붙이고 addActionListener메소드를 이용하여 actionPerformed메소드와 연결한다.
-
텍스트 필드 생성
-
JTextField로 텍스트 칸을 만든다. 역시나 마찬가지로 actionPerformed메소드에서 이용해야 하므로 클래스 바깥에서 전역변수로 선언한다. add()메소드로 Frame에 붙인다.
-
버튼 눌렀을때 Frame 백그라운드 색상 변경하기
-
Swing에서 Frame의 백그라운드 색상을 바꿀때에는 Container 객체를 생성해서 getContentPane()메소드를 이용한다.
-
Container con=getContentPane(), con.setBackground(Color.컬러명)
-
텍스트 필드에 쓴 글씨를 버튼 1을 눌렀을때 콘솔창에 나타내기
-
JTextfield 객체 jtf1.getText()로 내용을 가져온다.
-
setText()메소드를 이용하여 글자의 내용을 바꿀 수 있다. setText("")를 한다면 내용이 없어진다.
-
JTextArea(), TextArea()
-
한 행을 쓰는 칸은 JTextField, 여러 행을 쓰는 칸은 JTextArea()메소드를 이용한다.
-
JTextArea(5,20)은 5행에 20글자를 쓸 수 있는 칸. 스크롤바가 없어서 칸을 넘어서 글을 쓰면 지워진다.
-
TextArea()는 awt패키지를 import해야 사용할 수 있는데 자동으로 스크롤바가 생긴다.
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
package JPannel;
import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Action;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class JpannelTest extends JFrame implements ActionListener{
JTextField jtf1;
public JpannelTest() {
JButton b1=new JButton("버튼1");
JButton b2=new JButton("버튼2");
jtf1=new JTextField(20);
JTextArea ta=new JTextArea(5,20); //5행 20글자
TextArea tta=new TextArea(5,10); //스크롤바 생성
setLayout(new FlowLayout());
add(b1);
add(b2);
add(jtf1);
add(ta);
add(tta);
b1.addActionListener(this);
b2.addActionListener(this);
setSize(300,400);
setVisible(true);
}
public void actionPerformed(ActionEvent e) { //버튼이 눌러지는건 ActionEvent. 체크하는 건 ItemEvent
String str=e.getActionCommand();
Container con=getContentPane();
if(str.equals("버튼1")) {
System.out.println("버튼1 클릭");
//색깔을 직접적으로 구현할 수는 없고 Container를 구해와서 getContentPane()메소드를 이용한다.
con.setBackground(Color.yellow);
System.out.println(jtf1.getText());
}else {
System.out.println("버튼2 클릭");
con.setBackground(Color.blue);
jtf1.setText("");
}
}
public static void main(String[] args) {
new JpannelTest(); //생성자 만들기
}
}
|
'Learning > JAVA' 카테고리의 다른 글
텍스트필드에 단을 입력하고 구구단 버튼을 누르면 TextArea에 구구단 출력하기 (0) | 2020.06.10 |
---|---|
버튼을 패널로 묶고 패널 1 보이기, 안보이기 설정하기 (0) | 2020.06.10 |
파일 내용 맨 앞에 번호를 붙여 파일로 출력하기 (0) | 2020.06.10 |
DataInputStream과 DataOutputStream (0) | 2020.06.10 |
자바의 입출력, StringTokenizer, ObjectStream(ObjectOutputStream, writeObject, Serializable), 예외처리 throws, File (0) | 2020.06.09 |