2025-03-13
์ด๋ฒ ํ๋ก์ ํธ์์๋ Java Swing์ ํ์ฉํ์ฌ ์ฑํ
ํ๋ก๊ทธ๋จ์ ๊ตฌํํ์ต๋๋ค.
์ฌ์ฉ์๊ฐ ์
๋ ฅํ ์ฑํ
๋ด์ฉ์ JTextArea
์ ์ถ๋ ฅํ๊ณ , ํ์ผ ์ ์ฅ ๋ฐ ๋ถ๋ฌ์ค๊ธฐ ๊ธฐ๋ฅ๋ ์ถ๊ฐํ์์ต๋๋ค.
โ ์ฌ์ฉ๋ GUI ์ปดํฌ๋ํธ
JFrame
โ GUI ์ฐฝ ์์ฑ JPanel
โ GUI ์์ ๋ฐฐ์น JTextArea
โ ์ฑํ
๋ด์ฉ ์ถ๋ ฅ JTextField
โ ์ฌ์ฉ์ ์
๋ ฅ ํ๋ JButton
โ ๊ธฐ๋ฅ ๋ฒํผ (์ ์ฅ, ๋ถ๋ฌ์ค๊ธฐ, ์
๋ ฅ) JScrollPane
โ JTextArea
์ ์คํฌ๋กค ์ถ๊ฐ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ํ์ฉํ์ฌ ๋ฒํผ ํด๋ฆญ, ํค๋ณด๋ ์ ๋ ฅ, ๋ง์ฐ์ค ํด๋ฆญ ์ด๋ฒคํธ๋ฅผ ๊ฐ์งํฉ๋๋ค.
โ ์ด๋ฒคํธ ๋ฆฌ์ค๋ ์ธํฐํ์ด์ค ๊ตฌํ
ActionListener
โ ๋ฒํผ ํด๋ฆญ ์ด๋ฒคํธ ์ฒ๋ฆฌ KeyListener
โ ํค๋ณด๋ ์
๋ ฅ ๊ฐ์ง (Enter ํค) MouseListener
โ ๋ง์ฐ์ค ํด๋ฆญ ๊ฐ์ง โ ์ด๋ฒคํธ ๋ฆฌ์ค๋ ๋ฉ์๋
actionPerformed(ActionEvent e)
โ ๋ฒํผ ์ด๋ฒคํธ ์ฒ๋ฆฌ keyPressed(KeyEvent e)
โ ํค ์
๋ ฅ ์ฒ๋ฆฌ mouseClicked(MouseEvent e)
โ ๋ง์ฐ์ค ํด๋ฆญ ๊ฐ์ง โ
ํ์ผ ํ์๊ธฐ(JFileChooser
) ํ์ฉ
showSaveDialog()
โ ํ์ผ ์ ์ฅ ๋ค์ด์ผ๋ก๊ทธ showOpenDialog()
โ ํ์ผ ๋ถ๋ฌ์ค๊ธฐ ๋ค์ด์ผ๋ก๊ทธ โ
ํ์ผ ์ ์ฅ (FileWriter
)
try (Writer out = new FileWriter(filePath)) {
out.write(area1.getText());
}
FileWriter
๋ฅผ ์ฌ์ฉํด ์ฑํ
๋ด์ฉ์ .txt
ํ์ผ๋ก ์ ์ฅ try-with-resources
๊ตฌ๋ฌธ์ ์ฌ์ฉํ์ฌ ์๋ close()
โ
ํ์ผ ๋ถ๋ฌ์ค๊ธฐ (FileReader
)
try (Reader fin = new FileReader(selectedFile)) {
StringBuffer buffer = new StringBuffer();
int data;
while ((data = fin.read()) != -1) {
buffer.append((char) data);
}
area1.setText(buffer.toString());
}
FileReader
๋ฅผ ์ฌ์ฉํด ํ์ผ ๋ด์ฉ์ ์ฝ์ด์ JTextArea
์ ์ถ๋ ฅ while
๋ฃจํ๋ฅผ ์ด์ฉํด ํ ๋ฌธ์์ฉ ์ฝ์ด StringBuffer
์ ์ ์ฅ โ
setBounds(x, y, width, height)
โ GUI ์์์ ์์น ๋ฐ ํฌ๊ธฐ ์ค์
โ
panel.add(component)
โ ํจ๋์ GUI ์์ ์ถ๊ฐ
โ
frame.add(panel)
โ ํจ๋์ ํ๋ ์์ ์ถ๊ฐ
โ
KeyListener
๋ฅผ ํ์ฉํด Enter ํค ์
๋ ฅ ๊ฐ์ง
โ
VK_ENTER
์ฌ์ฉํ์ฌ Enter ํค ์ด๋ฒคํธ ์ฒ๋ฆฌ
โ
์
๋ ฅ๋ ๋ฉ์์ง๋ฅผ JTextArea
์ ์ถ๊ฐ ํ JTextField
์ด๊ธฐํ
@Override
public void keyPressed(KeyEvent e) {
if (e.getSource() == txt1 && e.getKeyCode() == KeyEvent.VK_ENTER) {
String message = txt1.getText();
area1.append(message + "\n");
txt1.setText(""); // ์
๋ ฅ ํ๋ ์ด๊ธฐํ
}
}
package ch19;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;
import javax.swing.text.BadLocationException;
class C08GUI extends JFrame implements ActionListener, KeyListener, MouseListener {
JButton btn1, btn2, btn3, input;
JTextField txt1;
JTextArea area1;
Writer out;
C08GUI(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("๋ถ๋ฌ์ค๊ธฐ");
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);
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == btn1) {
saveChat();
} else if (e.getSource() == btn2) {
loadChat();
} else if (e.getSource() == btn3) {
System.out.println("๋ํ๊ธฐ๋ก๋ณด๊ธฐ (๋ฏธ๊ตฌํ)");
} else if (e.getSource() == input) {
System.out.println("์
๋ ฅ");
}
}
private void saveChat() {
JFileChooser fileChooser = new JFileChooser();
fileChooser.setDialogTitle("ํ์ผ ์ ์ฅ ์์น๋ฅผ ์ ํํ์ธ์");
int selectedVal = fileChooser.showSaveDialog(null);
if (selectedVal == JFileChooser.APPROVE_OPTION) {
File selectedFile = fileChooser.getSelectedFile();
String filePath = selectedFile.toString();
if (!filePath.endsWith(".txt")) {
filePath += ".txt";
}
try (Writer out = new FileWriter(filePath)) {
out.write(area1.getText());
System.out.println("ํ์ผ ์ ์ฅ ์๋ฃ: " + filePath);
} catch (IOException e) {
e.printStackTrace();
}
}
}
private void loadChat() {
JFileChooser fileChooser = new JFileChooser();
fileChooser.setDialogTitle("๋ถ๋ฌ์ฌ ํ์ผ์ ์ ํํ์ธ์");
int selectedVal = fileChooser.showOpenDialog(null);
if (selectedVal == JFileChooser.APPROVE_OPTION) {
File selectedFile = fileChooser.getSelectedFile();
try (Reader fin = new FileReader(selectedFile)) {
StringBuffer buffer = new StringBuffer();
int data;
while ((data = fin.read()) != -1) {
buffer.append((char) data);
}
area1.setText(buffer.toString());
System.out.println("ํ์ผ ๋ถ๋ฌ์ค๊ธฐ ์๋ฃ: " + selectedFile);
} catch (IOException e) {
e.printStackTrace();
}
}
}
@Override
public void keyPressed(KeyEvent e) {
if (e.getSource() == txt1 && e.getKeyCode() == KeyEvent.VK_ENTER) {
String message = txt1.getText();
area1.append(message + "\n");
txt1.setText("");
}
}
@Override public void keyTyped(KeyEvent e) {}
@Override public void keyReleased(KeyEvent e) {}
@Override public void mouseClicked(MouseEvent e) {}
@Override public void mousePressed(MouseEvent e) {}
@Override public void mouseReleased(MouseEvent e) {}
@Override public void mouseEntered(MouseEvent e) {}
@Override public void mouseExited(MouseEvent e) {}
}
public class C08SwingEventMain {
public static void main(String[] args) {
new C08GUI("Chatting UI");
}
}