如何使用MySQL将一些行的特定信息添加到JTexFields

问题描述 投票:-2回答:1

我一直试图在用鼠标点击后向JTextField组件添加一个表行的信息,但它不起作用。我使用了DefaultTableModelJTable,如下所示。

这是我一直在使用的代码。

package scrCode;

import java.util.*;
import java.sql.*;

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.border.EmptyBorder;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;

import net.proteanit.sql.DbUtils;

import javax.swing.JTable;
import javax.swing.JLabel;
import java.awt.Font;
import javax.swing.SwingConstants;
import javax.swing.JButton;
import java.awt.SystemColor;
import java.awt.Color;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JTextField;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JComboBox;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

public class BorrowABook extends JFrame {

    private JPanel contentPane;
    private JTable table;
    private JButton button;
    private JLabel lblBookId;
    private JTextField textFieldBookID;
    private JLabel lblMemberId;
    private JTextField textFieldMemberID;


    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    BorrowABook frame = new BorrowABook();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public BorrowABook() {
        setTitle("Library system");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 971, 594);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        String data [][]=null;
        String column []=null;
        DefaultTableModel model = new DefaultTableModel();
        try {
            //code to receive data from the database 
            Connection con=DB.login();
            PreparedStatement ps=con.prepareStatement("select * from book",ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
            ResultSet rs=ps.executeQuery();

            ResultSetMetaData rsmd=rs.getMetaData();
            int cols=rsmd.getColumnCount();
            column=new String[cols];
            for(int i=1;i<=cols;i++){
                column[i-1]=rsmd.getColumnName(i);
            }

            rs.last();
            int rows=rs.getRow();
            rs.beforeFirst();

            data=new String[rows][cols];
            int count=0;
            while(rs.next()){
                for(int i=1;i<=cols;i++){
                    data[count][i-1]=rs.getString(i);
                }
                count++;
            }
            con.close();


        }catch (Exception e){
            System.out.println(e);
        }
        contentPane.setLayout(null);

        table = new JTable(data,column);
        JScrollPane sp = new JScrollPane(table);
        sp.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {

                int selectedRowIndex = table.getSelectedRow();              
                textFieldBookID.setText(model.getValueAt(selectedRowIndex, 0).toString());
                textFieldMemberID.setText(model.getValueAt(selectedRowIndex, 1).toString());



            }
        });
        sp.setBounds(5, 5, 936, 402);
        contentPane.add(sp);

        button = new JButton("Back");
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                UserSection.main(new String [] {});
                dispose();
            }
        });
        button.setForeground(Color.BLACK);
        button.setBackground(SystemColor.info);
        button.setBounds(856, 509, 85, 25);
        contentPane.add(button);

        lblBookId = new JLabel("Book ID:");
        lblBookId.setHorizontalAlignment(SwingConstants.RIGHT);
        lblBookId.setFont(new Font("Sitka Display", Font.BOLD, 22));
        lblBookId.setBounds(28, 420, 141, 29);
        contentPane.add(lblBookId);

        textFieldBookID = new JTextField();
        textFieldBookID.setColumns(10);
        textFieldBookID.setBounds(181, 420, 257, 29);
        contentPane.add(textFieldBookID);

        lblMemberId = new JLabel("Memeber ID:");
        lblMemberId.setHorizontalAlignment(SwingConstants.RIGHT);
        lblMemberId.setFont(new Font("Sitka Display", Font.BOLD, 22));
        lblMemberId.setBounds(28, 469, 141, 29);
        contentPane.add(lblMemberId);

        textFieldMemberID = new JTextField();
        textFieldMemberID.setColumns(10);
        textFieldMemberID.setBounds(181, 469, 257, 29);
        contentPane.add(textFieldMemberID);
    }
}
java mysql swing jtextfield
1个回答
1
投票

建议:

  • 将MouseListener添加到JTable,而不是JScrollPane。您需要在单击表格时收到通知。
  • 您在侦听器中使用了错误的模型,因为您从未使用数据填充DefaultTableModel。安全并通过table.getModel()在听众中获得模型
  • 没有空布局。虽然这不会导致您当前的问题,但它会强制您对库进行编码而不是使用它。

例如(为简单起见,删除了数据库代码,删除了null布局,并发布了MCVE):

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.border.EmptyBorder;
import javax.swing.table.DefaultTableModel;

public class BorrowABook extends JFrame {

    private JPanel contentPane;
    private JTable table;
    private JButton button;
    private JLabel lblBookId;
    private JTextField textFieldBookID;
    private JLabel lblMemberId;
    private JTextField textFieldMemberID;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    BorrowABook frame = new BorrowABook();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    public BorrowABook() {
        setTitle("Library system");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 971, 594);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        String data[][] = {{"1", "2", "3"}, {"4", "5", "6"}, {"7", "8", "9"}};
        String column[] = {"One", "Two", "Three" };
        DefaultTableModel model = new DefaultTableModel();
        // !! contentPane.setLayout(null);
        contentPane.setLayout(new BorderLayout());

        table = new JTable(data, column);
        JScrollPane sp = new JScrollPane(table);
        table.addMouseListener(new MouseAdapter() {
            @Override
            public void mousePressed(MouseEvent e) {

                int selectedRowIndex = table.getSelectedRow();
                textFieldBookID.setText(table.getModel().getValueAt(selectedRowIndex, 0).toString());
                textFieldMemberID.setText(table.getModel().getValueAt(selectedRowIndex, 1).toString());
            }
        });
        //!! sp.setBounds(5, 5, 936, 402);
        contentPane.add(sp);

        JPanel bottomPanel = new JPanel();

        lblBookId = new JLabel("Book ID:");
        lblBookId.setHorizontalAlignment(SwingConstants.RIGHT);
        lblBookId.setFont(new Font("Sitka Display", Font.BOLD, 22));
        bottomPanel.add(lblBookId);

        textFieldBookID = new JTextField();
        textFieldBookID.setColumns(10);
        textFieldBookID.setBounds(181, 420, 257, 29);
        bottomPanel.add(textFieldBookID);

        lblMemberId = new JLabel("Memeber ID:");
        lblMemberId.setHorizontalAlignment(SwingConstants.RIGHT);
        lblMemberId.setFont(new Font("Sitka Display", Font.BOLD, 22));
        lblMemberId.setBounds(28, 469, 141, 29);
        bottomPanel.add(lblMemberId);

        textFieldMemberID = new JTextField();
        textFieldMemberID.setColumns(10);
        textFieldMemberID.setBounds(181, 469, 257, 29);
        bottomPanel.add(textFieldMemberID);

        contentPane.add(bottomPanel, BorderLayout.PAGE_END);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.