미니 프로젝트1

AI·2025년 10월 2일

10/2

의류 판매(관리) 시스템 구현

swing

// 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();
        });
    }
}

0개의 댓글