10/2

의류 판매(관리) 시스템 구현
// Main
package swing;
import javax.swing.*;
public class Test {
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
new BookManager().setVisible(true);
});
}
}
// BookManager Swing
package swing;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
// swing
public class BookManager extends JFrame{
private JTable table; // grid 형태 UI
private DefaultTableModel tableModel; // JTable에서 다룰 데이터
private JButton insertButton, detailButton; // Button UI
private static final long serialVersionUID = 1L;
// 기본 생성자 - UI등 초기화
public BookManager(){
// window
setTitle("도서 관리"); // 제목
setSize(600, 400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// table
tableModel = new DefaultTableModel(new Object[] {"Book ID", "Book Name", "Publisher","Price"}, 0);
table = new JTable(tableModel); // UI + Data
// button
insertButton = new JButton("등록");
detailButton = new JButton("상세");
// button panel
JPanel buttonPanel = new JPanel();
buttonPanel.add(insertButton);
buttonPanel.add(detailButton);
// layout
setLayout(new BorderLayout());
add(new JScrollPane(table), BorderLayout.CENTER);
add(buttonPanel, BorderLayout.SOUTH);
// button click event handler
insertButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("insert");
// 그냥 this로 쓰면 ActionListener 객체를 뜻함
InsertBookDialog insertBookDialog = new InsertBookDialog(BookManager.this, tableModel);
insertBookDialog.setVisible(true);
}
});
detailButton.addActionListener( e -> {
System.out.println("detail");
int selectedRow = table.getSelectedRow();
if(selectedRow >= 0){
DetailBookDialog detailBookDialog = new DetailBookDialog(this, tableModel, selectedRow);
detailBookDialog.setVisible(true);
} else{
JOptionPane.showMessageDialog(this, "도서를 선택하세요");
}
});
}
}
// insert book
package swing;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class InsertBookDialog extends JDialog {
private JTextField bookIdField, bookNameField, publisherField, priceField;
private JButton insertButton;
public InsertBookDialog(JFrame parent, DefaultTableModel tableModel) {
setTitle("도서 등록");
setSize(300, 200);
setLocationRelativeTo(parent); // 부모에 맞게
setLayout(new GridLayout(5, 2));
// Fields
bookIdField = new JTextField();
bookNameField = new JTextField();
publisherField = new JTextField();
priceField = new JTextField();
insertButton = new JButton("Add");
// Add components
// 왼쪽 위부터 오른쪽 그리고 아래로 순차적으로 채워 진다.
add(new JLabel("Book ID:"));
add(bookIdField);
add(new JLabel("Book Name:"));
add(bookNameField);
add(new JLabel("Publisher:"));
add(publisherField);
add(new JLabel("Price:"));
add(priceField);
add(new JLabel());
add(insertButton);
// Add button action
insertButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String bookId = bookIdField.getText();
String bookName = bookNameField.getText();
String publisher = publisherField.getText();
String price = priceField.getText();
tableModel.addRow(new Object[]{bookId, bookName, publisher, price});
dispose();
}
});
}
}
// detail book
package swing;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
public class DetailBookDialog extends JDialog {
private JTextField bookIdField, bookNameField, publisherField, priceField;
private JButton saveButton;
public DetailBookDialog(JFrame parent, DefaultTableModel tableModel, int rowIndex) {
setTitle("도서 상세");
setSize(300, 200);
setLocationRelativeTo(parent); // 부모에 맞게
setLayout(new GridLayout(5, 2));
// Get current values
String bookId = (String) tableModel.getValueAt(rowIndex, 0);
String bookName = (String) tableModel.getValueAt(rowIndex, 1);
String publisher = (String) tableModel.getValueAt(rowIndex, 2);
String price = (String) tableModel.getValueAt(rowIndex, 3);
// Fields
bookIdField = new JTextField(bookId);
bookNameField = new JTextField(bookName);
publisherField = new JTextField(publisher);
priceField = new JTextField(price);
saveButton = new JButton("저장");
// Add components
add(new JLabel("Book ID:"));
add(bookIdField);
add(new JLabel("Book Name:"));
add(bookNameField);
add(new JLabel("Publisher:"));
add(publisherField);
add(new JLabel("Price:"));
add(priceField);
add(new JLabel());
add(saveButton);
// Save button action
// using lambda
saveButton.addActionListener( e -> {
tableModel.setValueAt(bookIdField.getText(), rowIndex, 0);
tableModel.setValueAt(bookNameField.getText(), rowIndex, 1);
tableModel.setValueAt(publisherField.getText(), rowIndex, 2);
tableModel.setValueAt(priceField.getText(), rowIndex, 3);
dispose();
});
}
}