본문 바로가기

Learning/JAVA

Java.awt / Javax.swing 패키지를 사용하여 프레임에 버튼, 텍스트필드 띄우기

  • 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();
        
    }
    
}
 

텍스트 칸에 ddd를 쓰고 버튼 1을 누르면 콘솔창에 그대로 출력된다.
버튼 2를 눌렀을때 blue 색상으로 변경된다.
버튼 3을 눌렀을때 pink색상으로 변경된다.

 


  • 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(); //생성자 만들기
    }
}