swing 连接数据库_打印日志

package com.test;

import org.mmc.util.swing.JswUtils;

import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

/**
 * swing 连接数据库
 * 更新时间: 2024年10月10日 14:07:52
 */
public class DatabaseQueryApp extends JFrame {
    private JTextField dbUrlField;
    private JTextField usernameField;
    private JPasswordField passwordField;
    private JTextArea logArea;
    private JTable resultTable;
    private DefaultTableModel tableModel;
    private JList<String> itemList;
    private DefaultListModel<String> listModel;

    public DatabaseQueryApp() {
        setTitle("Database Query Interface");
        setSize(900, 700);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new BorderLayout());
        JswUtils.setScreenMiddle(this);

        // North Panel with FlowLayout
        JPanel northPanel = new JPanel(new FlowLayout());
        dbUrlField = new JTextField(20);
        usernameField = new JTextField(10);
        passwordField = new JPasswordField(10);
        JButton connectButton = new JButton("连接");
        JButton runButton = new JButton("运行");

        northPanel.add(new JLabel("数据库地址:"));
        northPanel.add(dbUrlField);
        northPanel.add(new JLabel("账号:"));
        northPanel.add(usernameField);
        northPanel.add(new JLabel("密码:"));
        northPanel.add(passwordField);
        northPanel.add(connectButton);
        northPanel.add(runButton);

        // West Panel with List
        JPanel westPanel = new JPanel();
        listModel = new DefaultListModel<>();

        for (int i = 0; i < 200; i++) {
            // 添加示例数据到列表
            listModel.addElement("数据项 " + i);
        }
        itemList = new JList<>(listModel);
        itemList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        JScrollPane listScrollPane = new JScrollPane(itemList);
        // 设置首选大小,调整宽度
        listScrollPane.setPreferredSize(new Dimension(100, 200)); // 设置300px宽和200px高
        westPanel.setLayout(new BorderLayout());
        westPanel.add(listScrollPane, BorderLayout.CENTER);

        // Context Menu for JList
        JPopupMenu contextMenu = new JPopupMenu();
        JMenuItem menuItem1 = new JMenuItem("菜单1");
        JMenuItem menuItem2 = new JMenuItem("菜单2");
        JMenuItem menuItem3 = new JMenuItem("菜单3");
        contextMenu.add(menuItem1);
        contextMenu.add(menuItem2);
        contextMenu.add(menuItem3);

        itemList.setComponentPopupMenu(contextMenu);

        // Mouse Listener for the JList
        itemList.addMouseListener(new MouseAdapter() {
            @Override
            public void mousePressed(MouseEvent e) {
                if (e.isPopupTrigger()) {
                    contextMenu.show(itemList, e.getX(), e.getY());
                }
            }
        });

        // Center Panel with TextArea and JTable
        JPanel centerPanel = new JPanel(new BorderLayout());
        logArea = new JTextArea();
        logArea.setLineWrap(true); // 设置换行
        logArea.setWrapStyleWord(true); // 按词换行

        logArea.setEditable(true);
        JScrollPane textAreaScrollPane = new JScrollPane(logArea);
        textAreaScrollPane.setPreferredSize(new Dimension(400, 200)); // 设置首选大小
        centerPanel.add(textAreaScrollPane, BorderLayout.NORTH);

        tableModel = new DefaultTableModel();
        resultTable = new JTable(tableModel);
        JScrollPane tableScrollPane = new JScrollPane(resultTable);
        centerPanel.add(tableScrollPane, BorderLayout.CENTER);

        // South Panel with FlowLayout
        JPanel southPanel = new JPanel(new FlowLayout());
        JButton logButton1 = new JButton("打印日志");
        JButton logButton2 = new JButton("打印日志");
        JButton logButton3 = new JButton("打印日志");
        JButton logButton4 = new JButton("打印日志");

        southPanel.add(logButton1);
        southPanel.add(logButton2);
        southPanel.add(logButton3);
        southPanel.add(logButton4);

        // Add panels to the frame
        add(northPanel, BorderLayout.NORTH);
        add(westPanel, BorderLayout.WEST);
        add(centerPanel, BorderLayout.CENTER);
        add(southPanel, BorderLayout.SOUTH);

        // Action Listeners
        connectButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                connectToDatabase();
            }
        });

        runButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                runQuery();
            }
        });

        menuItem1.addActionListener(e -> printSelectedItem());
        menuItem2.addActionListener(e -> printSelectedItem());
        menuItem3.addActionListener(e -> printSelectedItem());

        // Display the application
        setVisible(true);
    }

    private void connectToDatabase() {
        String dbUrl = dbUrlField.getText();
        String username = usernameField.getText();
        String password = new String(passwordField.getPassword());
        logArea.append("尝试连接到数据库: " + dbUrl + "\n");
        try {
            Connection connection = DriverManager.getConnection(dbUrl, username, password);
            logArea.append("连接成功!\n");
        } catch (Exception e) {
            logArea.append("连接失败: " + e.getMessage() + "\n");
        }
    }

    private void runQuery() {
        String sql = logArea.getText(); // Assuming SQL is inputted in the log area for simplicity
        logArea.append("执行查询: " + sql + "\n");
        try {
            // Here you would execute the SQL query and populate the resultTable
            // For demonstration, we're using a mockup
            tableModel.setRowCount(0); // Clear previous results
            tableModel.setColumnCount(2); // Set number of columns
            tableModel.setColumnIdentifiers(new Object[]{"Column 1", "Column 2"}); // Sample header

            // Mock data for demonstration
            tableModel.addRow(new Object[]{"Sample Data 1", "Value 1"});
            tableModel.addRow(new Object[]{"Sample Data 2", "Value 2"});

            logArea.append("查询完成!\n");
        } catch (Exception e) {
            logArea.append("查询失败: " + e.getMessage() + "\n");
        }
    }

    private void printSelectedItem() {
        String selectedItem = itemList.getSelectedValue();
        if (selectedItem != null) {
            logArea.append("打印选中的项: " + selectedItem + "\n");
        } else {
            logArea.append("没有选中任何项!\n");
        }
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(DatabaseQueryApp::new);
    }
}
/**
     * 居中显示
     */
    public static void setScreenMiddle(JFrame frame) {
        int windowWidth = frame.getWidth(); //获得窗口宽
        int windowHeight = frame.getHeight(); //获得窗口高
        Toolkit kit = Toolkit.getDefaultToolkit(); //定义工具包
        Dimension screenSize = kit.getScreenSize(); //获取屏幕的尺寸
        int screenWidth = screenSize.width; //获取屏幕的宽
        int screenHeight = screenSize.height; //获取屏幕的高
        frame.setLocation((screenWidth - windowWidth) / 2, (screenHeight - windowHeight) / 2);//设置窗口居中显示
    }