๐Ÿ“Œ Java Swing์„ ํ™œ์šฉํ•œ ์ฑ„ํŒ… UI ๊ตฌํ˜„

My Pale Blue Dotยท2025๋…„ 3์›” 12์ผ
0

JAVA

๋ชฉ๋ก ๋ณด๊ธฐ
20/35
post-thumbnail

๐Ÿ“… ๋‚ ์งœ

2025๋…„ 3์›” 12์ผ

๐Ÿ“ ํ•™์Šต ๋‚ด์šฉ

1๏ธโƒฃ Java Swing์„ ํ™œ์šฉํ•œ GUI ํ”„๋กœ๊ทธ๋ž˜๋ฐ

Java Swing์€ GUI(๊ทธ๋ž˜ํ”ฝ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค) ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‹ค. ์ด๋ฒˆ ์˜ˆ์ œ์—์„œ๋Š” JFrame, JPanel, JButton, JTextArea, JTextField ๋“ฑ์„ ํ™œ์šฉํ•˜์—ฌ ๊ฐ„๋‹จํ•œ ์ฑ„ํŒ… ํ”„๋กœ๊ทธ๋žจ์„ ๊ตฌํ˜„ํ•œ๋‹ค.


2๏ธโƒฃ ๊ตฌํ˜„ํ•  ๊ธฐ๋Šฅ

โœ… JFrame์„ ์ด์šฉํ•œ GUI ํ”„๋ ˆ์ž„ ์ƒ์„ฑ
โœ… JTextArea๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ฑ„ํŒ… ๋ฉ”์‹œ์ง€ ํ‘œ์‹œ
โœ… JTextField๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฉ”์‹œ์ง€ ์ž…๋ ฅ
โœ… JButton์„ ํ™œ์šฉํ•˜์—ฌ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ ๋ฒ„ํŠผ ์ถ”๊ฐ€
โœ… KeyListener๋ฅผ ํ™œ์šฉํ•˜์—ฌ Enter ํ‚ค ์ž…๋ ฅ ์‹œ ์ฑ„ํŒ… ์ž…๋ ฅ
โœ… MouseListener๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ฑ„ํŒ… ๋‚ด ํŠน์ • ์ค„์„ ํด๋ฆญํ•˜๋ฉด ํ•ด๋‹น ์ค„ ์ถœ๋ ฅ


โœ… 3๏ธโƒฃ GUI ์ดˆ๊ธฐํ™” ๋ฐ ์ปดํฌ๋„ŒํŠธ ๋ฐฐ์น˜

๋‹ค์Œ์€ GUI๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๊ณ  ํ•„์š”ํ•œ ์ปดํฌ๋„ŒํŠธ(๋ฒ„ํŠผ, ํ…์ŠคํŠธ ์˜์—ญ, ์ž…๋ ฅ์ฐฝ ๋“ฑ) ๋ฅผ ๋ฐฐ์น˜ํ•˜๋Š” ์ฝ”๋“œ์ด๋‹ค.

class C07GUI extends JFrame implements ActionListener, KeyListener, MouseListener {
    JButton btn1, btn2, btn3, input;
    JTextField txt1;
    JTextArea area1;

    C07GUI(String title) {
        super(title);
        setBounds(100, 100, 410, 400);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel panel = new JPanel();
        panel.setLayout(null);

        area1 = new JTextArea();
        area1.setBounds(10, 10, 260, 280);
        JScrollPane scroll1 = new JScrollPane(area1);
        scroll1.setBounds(10, 10, 250, 280);

        btn1 = new JButton("ํŒŒ์ผ๋กœ์ €์žฅ");
        btn1.setBounds(270, 10, 110, 30);

        btn2 = new JButton("1:1์š”์ฒญ");
        btn2.setBounds(270, 50, 110, 30);

        btn3 = new JButton("๋Œ€ํ™”๊ธฐ๋ก๋ณด๊ธฐ");
        btn3.setBounds(270, 90, 110, 30);

        input = new JButton("์ž…๋ ฅ");
        input.setBounds(270, 300, 110, 30);

        txt1 = new JTextField();
        txt1.setBounds(10, 300, 250, 30);

        // ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ ๋“ฑ๋ก
        btn1.addActionListener(this);
        btn2.addActionListener(this);
        btn3.addActionListener(this);
        input.addActionListener(this);
        txt1.addKeyListener(this);
        area1.addMouseListener(this);

        // ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€
        panel.add(scroll1);
        panel.add(btn1);
        panel.add(btn2);
        panel.add(btn3);
        panel.add(input);
        panel.add(txt1);

        add(panel);
        setVisible(true);
    }
}

๐Ÿ”น ์ฝ”๋“œ ์„ค๋ช…

โœ” JFrame์„ ์ƒ์†๋ฐ›์•„ GUI ํ”„๋ ˆ์ž„ ์ƒ์„ฑ
โœ” JPanel์„ ํ™œ์šฉํ•˜์—ฌ ๋ ˆ์ด์•„์›ƒ ๊ด€๋ฆฌ
โœ” JTextArea๋ฅผ ์‚ฌ์šฉํ•ด ๋‹ค์ค‘ ์ค„ ํ…์ŠคํŠธ ์ž…๋ ฅ ๊ฐ€๋Šฅ
โœ” JScrollPane์„ ํ™œ์šฉํ•ด ์Šคํฌ๋กค ๊ฐ€๋Šฅํ•œ ์ฑ„ํŒ…์ฐฝ ์ถ”๊ฐ€
โœ” JButton์„ ํ™œ์šฉํ•ด ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ ๋ฒ„ํŠผ ์ƒ์„ฑ


โœ… 4๏ธโƒฃ ๋ฒ„ํŠผ ํด๋ฆญ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ (ActionListener)

๊ฐ ๋ฒ„ํŠผ์ด ํด๋ฆญ๋  ๋•Œ ์ˆ˜ํ–‰ํ•  ๋™์ž‘์„ actionPerformed() ๋ฉ”์„œ๋“œ์—์„œ ์ฒ˜๋ฆฌํ•œ๋‹ค.

@Override
public void actionPerformed(ActionEvent e) {
    if (e.getSource() == btn1) {
        System.out.println("ํŒŒ์ผ๋กœ ์ €์žฅ ํด๋ฆญ");
    } else if (e.getSource() == btn2) {
        System.out.println("1:1์š”์ฒญ ํด๋ฆญ");
    } else if (e.getSource() == btn3) {
        System.out.println("๋Œ€ํ™”๊ธฐ๋ก๋ณด๊ธฐ");
    } else if (e.getSource() == input) {
        System.out.println("์ž…๋ ฅ");
    }
}

โœ” btn1 ํด๋ฆญ โ†’ "ํŒŒ์ผ๋กœ ์ €์žฅ ํด๋ฆญ" ์ถœ๋ ฅ
โœ” btn2 ํด๋ฆญ โ†’ "1:1 ์š”์ฒญ ํด๋ฆญ" ์ถœ๋ ฅ
โœ” btn3 ํด๋ฆญ โ†’ "๋Œ€ํ™”๊ธฐ๋ก ๋ณด๊ธฐ" ์ถœ๋ ฅ
โœ” input ํด๋ฆญ โ†’ "์ž…๋ ฅ" ์ถœ๋ ฅ


โœ… 5๏ธโƒฃ ํ‚ค๋ณด๋“œ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ (KeyListener)

์—”ํ„ฐ ํ‚ค ์ž…๋ ฅ ์‹œ (KeyEvent.VK_ENTER == 10), ๋ฉ”์‹œ์ง€๋ฅผ JTextArea์— ์ถ”๊ฐ€ํ•œ๋‹ค.

@Override
public void keyPressed(KeyEvent e) {
    if (e.getSource() == txt1) {
        if (e.getKeyCode() == KeyEvent.VK_ENTER) { // Enter ํ‚ค ์ž…๋ ฅ ๊ฐ์ง€
            String message = txt1.getText();
            System.out.println(message);
            area1.append(message + "\n"); // ์ฑ„ํŒ…์ฐฝ์— ์ถ”๊ฐ€
            txt1.setText(""); // ์ž…๋ ฅ ํ•„๋“œ ์ดˆ๊ธฐํ™”
        }
    }
}

โœ” txt1 (์ž…๋ ฅ์ฐฝ)์—์„œ Enter ํ‚ค ์ž…๋ ฅ ์‹œ, ์ž…๋ ฅ๋œ ํ…์ŠคํŠธ๋ฅผ area1 (์ฑ„ํŒ…์ฐฝ)์œผ๋กœ ์ „์†ก
โœ” ์ž…๋ ฅ ํ›„, JTextField ๋‚ด์šฉ์„ ์ดˆ๊ธฐํ™”ํ•˜์—ฌ ๋‹ค์Œ ์ž…๋ ฅ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ํ•จ


โœ… 6๏ธโƒฃ ๋งˆ์šฐ์Šค ํด๋ฆญ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ (MouseListener)

์ฑ„ํŒ…์ฐฝ์—์„œ ํŠน์ • ์ค„์„ ํด๋ฆญํ•˜๋ฉด ํ•ด๋‹น ์ค„์˜ ๋‚ด์šฉ์„ ์ถœ๋ ฅํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋‹ค.

@Override
public void mouseClicked(MouseEvent e) {
    try {
        int offset = area1.viewToModel(e.getPoint());
        int row = area1.getLineOfOffset(offset);
        int startOffset = area1.getLineStartOffset(row);
        int endOffset = area1.getLineEndOffset(row);
        String str = area1.getText(startOffset, endOffset - startOffset);
        System.out.println("ํด๋ฆญํ•œ ์ค„: " + str);
    } catch (BadLocationException e1) {
        e1.printStackTrace();
    }
}

โœ” JTextArea์˜ ํด๋ฆญํ•œ ์œ„์น˜๋ฅผ ๊ณ„์‚ฐํ•˜์—ฌ ํ•ด๋‹น ์ค„์˜ ์‹œ์ž‘๊ณผ ๋์„ ๊ตฌํ•จ
โœ” ์„ ํƒ๋œ ์ค„์˜ ๋‚ด์šฉ์„ System.out.println()์„ ์ด์šฉํ•ด ์ถœ๋ ฅ


โœ… 7๏ธโƒฃ ๋ฉ”์ธ ํ•จ์ˆ˜ ์‹คํ–‰

public class C07SwingEventMain {
    public static void main(String[] args) {
        new C07GUI("Chatting UI");
    }
}

โœ” main() ๋ฉ”์„œ๋“œ์—์„œ C07GUI ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰


๐Ÿ‘€๊ฒฐ๊ณผ


๐Ÿ”ฅ ์ •๋ฆฌ

โœ” Swing GUI๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ฑ„ํŒ… UI ๊ตฌํ˜„
โœ” ๋ฒ„ํŠผ ํด๋ฆญ ์ด๋ฒคํŠธ (ActionListener) ์ ์šฉ
โœ” Enter ํ‚ค ์ž…๋ ฅ ์‹œ ํ…์ŠคํŠธ ์ „์†ก (KeyListener) ๊ตฌํ˜„
โœ” ๋งˆ์šฐ์Šค ํด๋ฆญ ์‹œ ํŠน์ • ์ค„ ์„ ํƒ ๊ธฐ๋Šฅ (MouseListener) ์ถ”๊ฐ€


๐Ÿ”— ์ฐธ๊ณ  ์ž๋ฃŒ


profile
Here, My Pale Blue.๐ŸŒ

0๊ฐœ์˜ ๋Œ“๊ธ€