Java 88(WindowBuilder, 버튼 누르면 글자색 바뀌는 프로그램)

Kang.__.Mingu·2024년 5월 21일
0

Java

목록 보기
90/108

WindowBuilder 설치

  • 메뉴바에서 HELP -> Eclipse Markplace -> WindowBuilder 설치

WindowBuilder 사용법

  • 파일 생성 -> Other -> WindowBuilder -> Swing Designer -> JFrame

IntelliJ에 설치

  • 그냥 이클립스에서 GUI로 UI짜고 코드를 인텔리제이에서 짜는게 편하다.

  • 인텔리제이에서 Frame짜는게 생각보다 불편한 점이 많았음

그래서 WindowBuilder이 뭘까

  • 클릭 몇 번으로 UI를 제작할 수 있다.

WindowBuilderApp

  • UI는 이클립스에서 WindowBuilder로 제작

  • 이벤트 처리만 인텔리제이에서 코드 짜줌

  • ColorTextArea 이벤트 생성

    • 버튼이 눌리면 해당 버튼의 메모리를 값과 비교해서 textArea 글자색을 바꿔줌
import javax.swing.*;
import javax.swing.border.EmptyBorder;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class WindowBuilderApp extends JFrame {

    private static final long serialVersionUID = 1L;
    private JPanel contentPane;
    private JButton redButton;
    private JButton greenButton;
    private JButton blueButton;
    private JTextArea textArea;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    WindowBuilderApp frame = new WindowBuilderApp();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public WindowBuilderApp() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(800, 200, 400, 500);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));

        setContentPane(contentPane);
        contentPane.setLayout(new BorderLayout(0, 0));

        JPanel panel = new JPanel();
        contentPane.add(panel, BorderLayout.NORTH);
        panel.setLayout(new GridLayout(1, 3, 3, 0));

        redButton = new JButton("빨간색");
        redButton.setForeground(new Color(255, 0, 0));
        redButton.setFont(new Font("굴림체", Font.BOLD, 20));
        panel.add(redButton);

        greenButton = new JButton("초록색");
        greenButton.setForeground(new Color(0, 255, 0));
        greenButton.setFont(new Font("굴림체", Font.BOLD, 20));
        panel.add(greenButton);

        blueButton = new JButton("파란색");
        blueButton.setForeground(new Color(0, 0, 255));
        blueButton.setFont(new Font("굴림체", Font.BOLD, 20));
        panel.add(blueButton);

        JScrollPane scrollPane = new JScrollPane();
        contentPane.add(scrollPane);

        textArea = new JTextArea();
        textArea.setFocusable(false);
        textArea.setFont(new Font("굴림체", Font.BOLD, 20));
        scrollPane.setViewportView(textArea);
		
        // 이 부분부터 인텔리제이에서 작성
        // TextFiled에서 글 작성 후 인벤트 발생시 TextArea에 글 추가됨
        JTextField textField = new JTextField();
        textField.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                String text=textField.getText();
                if(!text.equals("")) {
                    textArea.append(text+"\n");
                    textArea.setCaretPosition(textArea.getText().length());
                    textField.setText("");
                }
            }
        });

        redButton.addActionListener(new ColorTextArea());
        greenButton.addActionListener(new ColorTextArea());
        blueButton.addActionListener(new ColorTextArea());

        textField.setFont(new Font("굴림체", Font.BOLD, 20));
        contentPane.add(textField, BorderLayout.SOUTH);
        textField.setColumns(10);
    }
	
    // 상단 RED, GREEN, BLUE 버튼 클릭시 글자색 변경
    public class ColorTextArea implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent e) {
            Object source = e.getSource();

            if(source == redButton) {
                textArea.setForeground(Color.RED);
            } else if(source == greenButton) {
                textArea.setForeground(Color.GREEN);
            } else if(source == blueButton) {
                textArea.setForeground(Color.BLUE);
            }
        }
    }
}
profile
최선을 다해 꾸준히 노력하는 개발자 망고입니당 :D

0개의 댓글