2025๋ 3์ 12์ผ
Java Swing์ GUI(๊ทธ๋ํฝ ์ฌ์ฉ์ ์ธํฐํ์ด์ค) ์ ํ๋ฆฌ์ผ์ด์
์ ๋ง๋ค ์ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค. ์ด๋ฒ ์์ ์์๋ JFrame
, JPanel
, JButton
, JTextArea
, JTextField
๋ฑ์ ํ์ฉํ์ฌ ๊ฐ๋จํ ์ฑํ
ํ๋ก๊ทธ๋จ์ ๊ตฌํํ๋ค.
โ
JFrame
์ ์ด์ฉํ GUI ํ๋ ์ ์์ฑ
โ
JTextArea
๋ฅผ ํ์ฉํ์ฌ ์ฑํ
๋ฉ์์ง ํ์
โ
JTextField
๋ฅผ ์ด์ฉํ์ฌ ๋ฉ์์ง ์
๋ ฅ
โ
JButton
์ ํ์ฉํ์ฌ ๋ค์ํ ๊ธฐ๋ฅ ๋ฒํผ ์ถ๊ฐ
โ
KeyListener
๋ฅผ ํ์ฉํ์ฌ Enter ํค ์
๋ ฅ ์ ์ฑํ
์
๋ ฅ
โ
MouseListener
๋ฅผ ํ์ฉํ์ฌ ์ฑํ
๋ด ํน์ ์ค์ ํด๋ฆญํ๋ฉด ํด๋น ์ค ์ถ๋ ฅ
๋ค์์ 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
์ ํ์ฉํด ์ฌ๋ฌ ๊ธฐ๋ฅ ๋ฒํผ ์์ฑ
๊ฐ ๋ฒํผ์ด ํด๋ฆญ๋ ๋ ์ํํ ๋์์ 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
ํด๋ฆญ โ "์
๋ ฅ" ์ถ๋ ฅ
์ํฐ ํค ์
๋ ฅ ์ (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
๋ด์ฉ์ ์ด๊ธฐํํ์ฌ ๋ค์ ์
๋ ฅ์ ๋ฐ์ ์ ์๋๋ก ํจ
์ฑํ ์ฐฝ์์ ํน์ ์ค์ ํด๋ฆญํ๋ฉด ํด๋น ์ค์ ๋ด์ฉ์ ์ถ๋ ฅํ๋ ๊ธฐ๋ฅ์ด๋ค.
@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()
์ ์ด์ฉํด ์ถ๋ ฅ
public class C07SwingEventMain {
public static void main(String[] args) {
new C07GUI("Chatting UI");
}
}
โ main()
๋ฉ์๋์์ C07GUI
๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ ํ๋ก๊ทธ๋จ ์คํ
โ Swing GUI๋ฅผ ํ์ฉํ์ฌ ์ฑํ
UI ๊ตฌํ
โ ๋ฒํผ ํด๋ฆญ ์ด๋ฒคํธ (ActionListener) ์ ์ฉ
โ Enter ํค ์
๋ ฅ ์ ํ
์คํธ ์ ์ก (KeyListener) ๊ตฌํ
โ ๋ง์ฐ์ค ํด๋ฆญ ์ ํน์ ์ค ์ ํ ๊ธฐ๋ฅ (MouseListener) ์ถ๊ฐ