[Java swing] 자바 스윙 사용법 정리 2 : 버튼 누를 때 프로그램 종료, 문자열 출력하기

728x90

[Java swing] 자바 스윙 사용법 정리 2 : 버튼 누를 때 프로그램 종료, 문자열 출력하기

 

앞의 내용을 바탕으로 frame객체를 생성하고 빈 창을 띄울 수 있는 코드를 작성했다.

import javax.swing.*;
import java.awt.*;

public class StudySwing {
    public static void main(String[] args) {
        JFrame frame = new JFrame();

        frame.setResizable(false);
        frame.setVisible(true);
        frame.setPreferredSize(new Dimension(840, 640));
        frame.setSize(840, 640);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


    }
}

 

이번에는 버튼을 클릭했을 때 특정 행동을 하도록 만들어보자.

먼저 패널 하나를 생성하고 그 위에 하나의 버튼을 올린다.

 

import javax.swing.*;
import java.awt.*;

public class StudySwing {
    public static void main(String[] args) {
        JFrame frame = new JFrame();
        JPanel panel = new JPanel();    // 추가
        JButton btn1 = new JButton("Exit"); // 추가

        frame.setResizable(false);
        frame.setVisible(true);
        frame.setPreferredSize(new Dimension(840, 640));
        frame.setSize(840, 640);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frame.add(panel); // 추가
        panel.add(btn1);  // 추가

    }

etc-image-0

이제 exit버튼을 누르면 프로그램이 종료되도록 하는 기능을 넣을 것이다. 

btn1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.exit(0);
            }
        });

버튼이 클릭되면 actionPerfomed 함수가 실행된다. 인텔리제이에서는 new ActionListener() 부분을 입력할 때 나머지 코드를 자동으로 작성해주도록 하는 내부 기능이 동작할 것이다.

 

함수 내부에 System.exit(0);은 프로그램을 종료하는 함수를 호출한다.

 

빌드해보면 Exit버튼을 클릭할 때 프로그램이 종료되는 것을 확인할 수 있다.

 

 

panel 위에 button_panel을 달아 그 위에 버튼을 두개 생성하여 위쪽에 배치하고, 텍스트 에어리어를 패널 중간에 배치해보자.

 

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class StudySwing {
    public static void main(String[] args) {
        JFrame frame = new JFrame();
        JPanel panel = new JPanel();
        JPanel btn_panel = new JPanel(); //추가
        JButton btn1 = new JButton("Exit");
        JButton btn2 = new JButton("Text adder");  //추가
        JTextArea txtArea = new JTextArea();  //추가

        frame.setResizable(false);
        frame.setVisible(true);
        frame.setPreferredSize(new Dimension(840, 640));
        frame.setSize(840, 640);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frame.add(panel);
        // -------------------------------------------
        panel.setLayout(new BorderLayout());  
        panel.add(btn_panel, BorderLayout.NORTH);
        btn_panel.add(btn1);
        btn_panel.add(btn2);
        panel.add(txtArea, BorderLayout.CENTER);
        
        // ------------------------------------------ 추가

        btn1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.exit(0);
            }
        });

//---------------------------------------------------------
        btn2.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                txtArea.append("돈 줘\n");
            }
        });
//--------------------------------------------------------추가
    }
}

 

frame.add(panel);
panel.setLayout(new BorderLayout());
panel.add(btn_panel, BorderLayout.NORTH);
btn_panel.add(btn1);
btn_panel.add(btn2);
panel.add(txtArea, BorderLayout.CENTER);

 

setLayout(new BorderLayout());을 선언하면 패널 위에 놓일 것들에 대한 위치를 설정할 수 있다.

먼저 frame에 panel을 올린다.

panel위에는 btn_panel과 텍스트에어리어가 위, 아래로 올려져 있다.

마지막으로 btn_panel 위에는 버튼 2개가 올려진다.

 

 

btn2.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                txtArea.append("돈 줘\n");
            }
        });

텍스트 에어리어 객체 내부에는 문자열을 출력하는 append함수가 있다.

개행을 하려면 콘솔 창에서 개행을 하는 방법과 마찬가지로 \n을 사용한다.

 

 

etc-image-1

Exit버튼을 누르면 프로그램이 종료되고, Text adder를 누르면 텍스트 에어리어에 지정했던 글자가 출력된다.

 

 

라벨에 특정 글자를 출력하게 하기

 

이번에는 textadder버튼을 누르면 label의 글자를 변경하도록 해보자.

 

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class StudySwing {
    public static void main(String[] args) {
        JFrame frame = new JFrame();
        JPanel panel = new JPanel();
        JPanel btn_panel = new JPanel();
        JButton btn1 = new JButton("Exit");
        JButton btn2 = new JButton("Text adder");
        JTextArea txtArea = new JTextArea();
        JLabel label = new JLabel("text"); // 추가

        frame.setResizable(false);
        frame.setVisible(true);
        frame.setPreferredSize(new Dimension(840, 640));
        frame.setSize(840, 640);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frame.add(panel);
        panel.setLayout(new BorderLayout());
        panel.add(btn_panel, BorderLayout.NORTH);
        btn_panel.add(btn1);
        btn_panel.add(btn2);
        panel.add(txtArea, BorderLayout.CENTER);
        panel.add(label, BorderLayout.SOUTH); // 추가

        btn1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.exit(0);
            }
        });


        btn2.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                label.setText("돈 줘\n"); // 변경
            }
        });

    }
}

 

label에 특정 문자열을 출력하도록 하려면 setText함수를 사용해야 한다.

etc-image-2

Text adder버튼을 누르니 맨 밑에 생성된 라벨에 적힌 텍스트가 바뀌는 것을 확인할 수 있다.

 

텍스트 에어리어에 대해 getText()함수를 사용하면 텍스트 에어리어에 적혀있는 값을 그대로 들고 올 수 있다.

위의 코드에서 label.setText("돈 줘\n"); 부분을 

label.setText(txtArea.getText());

로 바꾸어 보자.

etc-image-3

위의 텍스트에어리어에 특정값을 입력한 후에 Text adder 버튼을 클릭하면 아래에 있는 label의 텍스트가 입력했던 값으로 바뀐다.

728x90