【发布时间】:2025-12-01 05:20:03
【问题描述】:
我创建了一个 java 程序,其中:
用户可以使用自定义的 JOption showConfirmDialog 框(添加面板和文本框)输入数据
我为用户输入使用了单独的方法
public static String[] MultiInput(){
JTextField idField = new JTextField(5);
JTextField nameField = new JTextField(5);
JTextField addressField = new JTextField(5);
JTextField ageField = new JTextField(5);
JPanel myPanel = new JPanel();
myPanel.add(new JLabel("ID number:"));
myPanel.add(idField);
myPanel.add(Box.createHorizontalStrut(15)); // for spacing
myPanel.add(new JLabel("Name:"));
myPanel.add(nameField);
myPanel.add(Box.createHorizontalStrut(15)); // for spacing
myPanel.add(new JLabel("Address:"));
myPanel.add(addressField);
myPanel.add(Box.createHorizontalStrut(15)); // for spacing
myPanel.add(new JLabel("Age:"));
myPanel.add(ageField);
int result = JOptionPane.showConfirmDialog(null, myPanel,
"Please Enter Data Here:", JOptionPane.OK_CANCEL_OPTION);
if (result == JOptionPane.OK_OPTION) {
String[] Input={idField.getText(),nameField.getText(),addressField.getText(),ageField.getText()};
return Input;
}
return null;
}
并在用户单击 jTable 上的一行时调用此方法
private void jTable1MouseClicked(java.awt.event.MouseEvent evt) {
int row = jTable1.getSelectedRow();
String[] input;
input =MultiInput(); // get input from user
for(int ctr=0;ctr<jTable1.getColumnCount();ctr++){
jTable1.setValueAt(input[ctr], row, ctr);
}
用户填写TextFields,点击“确定”后,设置jTable中选定行的值。
问题是如果用户单击 jTable,我想为输入创建一个新行
编辑:
这就是我创建 jTable 和表模型的方式
final DefaultTableModel model = new javax.swing.table.DefaultTableModel(
new Object [][] {
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null}
},
new String [] {
"idnum", "name", "adress", "age"
}
);
jTable1 = new javax.swing.JTable();
jTable1.setAutoCreateRowSorter(true);
jTable1.setModel(model);
jTable1.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
jTable1MouseClicked(evt);
}
});
jScrollPane1.setViewportView(jTable1);
【问题讨论】:
-
使用
TableModel添加行。你用的是什么类型的TableModel?也许看看How to Use Tables -
@MadProgrammer 我认为这是默认的表模型。它在这里说 'jTable1.setModel(new javax.swing.table.DefaultTableModel(....'
-
@trashgod 您向我们展示的喜欢的人说 创建动态表以添加新条目 带有按钮。如果用户“单击” jTable,我想要的是为输入创建一个新行。我想我会试试 MadProgrammer 的建议
-
维护对
DefaultTableModel实例的引用(确保将其应用到JTable),当您需要使用add的一种DefautTableModel方法时向其中添加新数据。它会自动更新表格
标签: java swing jtable mouselistener defaulttablemodel