提问者:小点点

JTable值被覆盖


我的GUI应用程序是连接到DB,我已经设法将产品从DB添加到GUI上的JTable。当我单击第二个按钮时,它会覆盖第一个按钮。我不想要这个,因为它是一个订单到系统,我希望我单击的任何东西在单击时出现在表上。有没有办法附加到表上,而不是每次都覆盖值。这是我的代码。

americanoSmall.addActionListener(
        new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                try {
                    String query = "select ProductName, Price from product where ProductID = 24";
                    java.sql.PreparedStatement pst = connection.prepareStatement(query);
                    ResultSet rs = pst.executeQuery();
                    table.setModel(DbUtils.resultSetToTableModel(rs));

                    } catch (Exception e1) 
                    {
                        e1.printStackTrace();
                    }
                }
            });

共1个答案

匿名用户

不要在模型更改时更改表模型。相反,使用TableModeladdRow方法。这是一个最小的、完整的和可验证的示例。

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

public class Test {
    public static void main(String[] args) {
        JFrame frame = new JFrame("Test");

        Container cont = frame.getContentPane();
        cont.setLayout(new BorderLayout());

        DefaultTableModel dtm = new DefaultTableModel(new Object[]{"Column 1","Column 2"}, 0);
        JTable table = new JTable(dtm);

        JScrollPane scroll = new JScrollPane(table);
        cont.add(scroll, BorderLayout.CENTER);

        dtm.addRow(new Object[]{"Value 1", "Value 2"});

        JButton add = new JButton("Add");
        cont.add(add, BorderLayout.NORTH);

        add.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                dtm.addRow(new Object[]{"Another value", "Another value"});
            }
        });

        frame.pack();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}