创建最初为空但允许用户动态添加行的Java表模型

我正在创建一个主要function包含在JTable中的应用程序。 我需要使用addRow方法创建一个附带的表模型,用户在窗口中输入详细信息,并在单击JButton时将数据引入一个数组,该数组将传递给addRow()方法以添加到表中。 然而,似乎不可能创建一个空表,在我为10行的行创建二维数组的情况下,在渲染表时,编译器在’JTable.prepareRenderer’方法中标记NullPointerException。

我希望我需要做的事情已经明确了!

这是您的示例代码。 您可以根据自己的要求轻松修改它。

 import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; 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.SwingUtilities; import javax.swing.table.DefaultTableModel; public class FrmTable extends JFrame{ private JTable table; private JButton btnAdd; private DefaultTableModel tableModel; private JTextField txtField1; private JTextField txtField2; private FrmTable() { createGUI(); } private void createGUI() { setLayout(new BorderLayout()); JScrollPane pane = new JScrollPane(); table = new JTable(); pane.setViewportView(table); JPanel eastPanel = new JPanel(); btnAdd = new JButton("Add"); eastPanel.add(btnAdd); JPanel northPanel = new JPanel(); txtField1 = new JTextField(); txtField2 = new JTextField(); JLabel lblField1 = new JLabel("Column1 "); JLabel lblField2 = new JLabel("Column2 "); northPanel.add(lblField1); northPanel.add(txtField1); northPanel.add(lblField2); northPanel.add(txtField2); txtField1.setPreferredSize(lblField1.getPreferredSize()); txtField2.setPreferredSize(lblField2.getPreferredSize()); add(northPanel, BorderLayout.NORTH); add(eastPanel, BorderLayout.EAST); add(pane,BorderLayout.CENTER); tableModel = new DefaultTableModel(new Object[]{"column1","column2"},0); table.setModel(tableModel); btnAdd.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { int count = tableModel.getRowCount()+1; tableModel.addRow(new Object[]{txtField1.getText(),txtField1.getText()}); } }); } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { FrmTable frm = new FrmTable(); frm.setLocationByPlatform(true); frm.pack(); frm.setDefaultCloseOperation(EXIT_ON_CLOSE); frm.setVisible(true); } }); } } 

具有10行的表不是空表。 这是一个包含10行空值的表。 确保您的行具有正确的列数。 跟随堆栈跟踪并找到NullPointer的源,如果它在CustomerRenderer中,那么请确保正确处理空值。

不确定你的表中包含哪些数据,但也许你的10行应该使用空字符串而不是空值进行默认。