我尝试了将近2个小时来弄清楚如何从JTable中删除和更新1行但不知何故它不会工作。 我使用以下代码:
DefaultTableModel modelTable = (DefaultTableModel) jTabelRooster.getModel();
modelTable.addRow(new Object[]{lid.getLidnummer().toString(), lid.getLidvoornaam(), lid.getLidtussenvoegsel(),lid.getLidachternaam(), lid.getAanwezig()});
好了到目前为止很好..行很好地添加..但现在我想删除它们:
int SelectedRow = jTabelRooster.getSelectedRow();
modelTable.removeRow(SelectedRow);
当我这样做时,我收到以下错误: 线程中的异常“AWT-EventQueue-0”java.lang.ArrayIndexOutOfBoundsException:2> = 2
您的帮助将不胜感激
编辑: jTabelRooster已由gui布局管理器插入 所以我现在有了这个代码,而且我没有取得多大成功:
private void initRoosterDetail()
{
for(int i = 0; i < leden.size(); i++)
{
lid = leden.get(i);
modelTable.addRow(new Object[]{lid.getLidnummer().toString(), lid.getLidvoornaam(), lid.getLidtussenvoegsel(),lid.getLidachternaam(), lid.getAanwezig()});
}
}
private void jbInschrijvingVerwijderenActionPerformed(java.awt.event.ActionEvent evt) {
int SelectedRow = jTabelRooster.getSelectedRow();
modelTable.removeRow(jTabelRooster.convertRowIndexToModel(SelectedRow));
}
必须如此:)
当我在表格中选择1行并按下取消按钮时...我收到此消息:
线程中的异常“AWT-EventQueue-0”java.lang.ArrayIndexOutOfBoundsException:2&gt; = 2
============================================ ================================================== ================================================== ================================================== ================================================== ================================================== ==================================
Thanx所有的帮助...我知道我做错了什么...它与我使用的tableModelListener有关..所以这给我留下了另一个问题:)
jTabelRooster.getModel().addTableModelListener(
new TableModelListener()
{
public void tableChanged(TableModelEvent evt)
{
if(jTabelRooster.getSelectedColumn() == 4)
{
}
}
});
这段代码搞乱了删除命令。
我有一个带有复选框的布尔列:(
答案 0 :(得分:2)
int selectedRow = jTabelRooster.getSelectedRow();
modelTable.removeRow(SelectedRow);
如果未选择任何行,则jTabelRooster.getSelectedRow()
将返回 -1
因此,在删除之前,请检查是否选择了某行。
int selectedRow = jTabelRooster.getSelectedRow();
if(selectedRow != -1) {
modelTable.removeRow(selectedRow);
}
P.S:尝试遵循java命名约定。变量名称应以小写字母开头。
修改强>
一个示例,说明如何使用表中的DefaultTableModel
添加和删除行。
private void createUI() {
JFrame frame = new JFrame();
frame.setLayout(new BorderLayout());
final JTable table = new JTable();
final DefaultTableModel model = new DefaultTableModel(5, 3);
table.setModel(model);
JPanel btnPnl = new JPanel(new BorderLayout());
JPanel bottombtnPnl = new JPanel(new FlowLayout(FlowLayout.CENTER));
JButton addBtn = new JButton("Add");
JButton deleteBtn = new JButton("Remove");
bottombtnPnl.add(addBtn);
bottombtnPnl.add(deleteBtn);
addBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
model.addRow(new Object[]{});
}
});
deleteBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int selRow = table.getSelectedRow();
if(selRow != -1) {
model.removeRow(selRow);
}
}
});
btnPnl.add(bottombtnPnl, BorderLayout.CENTER);
table.getTableHeader().setReorderingAllowed(false);
frame.add(table.getTableHeader(), BorderLayout.NORTH);
frame.add(table, BorderLayout.CENTER);
frame.add(btnPnl, BorderLayout.SOUTH);
frame.setTitle("JTable Example.");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
答案 1 :(得分:2)
我们可以根据这段代码说:
private void jbInschrijvingVerwijderenActionPerformed(java.awt.event.ActionEvent evt) {
int SelectedRow = jTabelRooster.getSelectedRow();
modelTable.removeRow(jTabelRooster.convertRowIndexToModel(SelectedRow));
}
并出现此错误:
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 2 >= 2
是某种方式,由modelTable持有的TableModel与jTabelRooster JTable持有的实际模型不同步,而这就是它。我们知道这一点,因为您在JTable中选择的行是第2行,这是第3行,但是modelTable持有的模型显示它只包含2行。基于您迄今为止提供的有限信息,我们无法猜测这种情况发生的原因或原因。
同样,您应该强烈考虑创建和发布sscce。