我有一个框架,里面有一张桌子和两个按钮。
1) 重复行2)删除行
表a在第三列中的组合
我有一个场景,我复制空白行并点击最后一排的组合框来选择该行,然后单击删除行按钮…然后在删除后,每当我尝试单击任何单元格时,它都会给我以下错误。
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 6 >= 6
at java.util.Vector.elementAt(Unknown Source)
at javax.swing.table.DefaultTableModel.setValueAt(Unknown Source)
at javax.swing.JTable.setValueAt(Unknown Source)
at javax.swing.JTable.editingStopped(Unknown Source)
at javax.swing.AbstractCellEditor.fireEditingStopped(Unknown Source)
at javax.swing.DefaultCellEditor$EditorDelegate.stopCellEditing(Unknown Source)
at javax.swing.DefaultCellEditor$3.stopCellEditing(Unknown Source)
at javax.swing.DefaultCellEditor.stopCellEditing(Unknown Source)
at javax.swing.plaf.basic.BasicTableUI$Handler.mousePressed(Unknown Source)
at java.awt.AWTEventMulticaster.mousePressed(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$300(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
下面是相关框架的源代码。
public class UI {
JFrame frame;
JTable TblFilePane1;
UI()
{
Toolkit kit = Toolkit.getDefaultToolkit();
Dimension screen = kit.getScreenSize();
frame = new JFrame("Web Automation Tool (Selenium)");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//frame.setResizable(false);
frame.setLocation(screen.width/5, screen.height/300);
frame.setPreferredSize(new Dimension(1000, 820));
frame.pack();
frame.setVisible(true);
final JPanel Pane1 = new JPanel(new BorderLayout());
final JPanel FotterPanelPane1 = new JPanel(new BorderLayout());
String columnNamesTestSuitePane1[] = { "Scope ID","Test Suite","Data File Required","Data File Path"};
// Create some data
String dataValuesTestSuitePane1[][] =
{
{ "","","Yes","" },
};
// Create a new table instance
TblFilePane1 = new JTable( dataValuesTestSuitePane1, columnNamesTestSuitePane1 );
TblFilePane1.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
TblFilePane1.getTableHeader().setReorderingAllowed(false);
TblFilePane1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
DefaultTableModel modelPane1 = new DefaultTableModel(dataValuesTestSuitePane1, columnNamesTestSuitePane1);
TblFilePane1.setModel(modelPane1);
TblFilePane1.setRowHeight(22);
final JScrollPane scrollPane1 = new JScrollPane( TblFilePane1 );
//scrollPane1.setBounds(0, 0, 250, 250);
//final LineNumberTableRowHeader TblFilePane1LineNumber = new LineNumberTableRowHeader(scrollPane1, TblFilePane1);
//TblFilePane1LineNumber.setBackground(Color.orange);
//scrollPane1.setRowHeaderView(TblFilePane1LineNumber);
TableColumn ScopeIDPane1 = TblFilePane1.getColumnModel().getColumn(0);
ScopeIDPane1.setPreferredWidth(30);
TableColumn TSIDPane1 = TblFilePane1.getColumnModel().getColumn(1);
ScopeIDPane1.setPreferredWidth(30);
TableColumn dfReq = TblFilePane1.getColumnModel().getColumn(2);
JComboBox cmbDfReq = new JComboBox();
cmbDfReq.addItem("Yes");
cmbDfReq.addItem("No");
dfReq.setPreferredWidth(40);
TableColumn DataFile = TblFilePane1.getColumnModel().getColumn(3);
DataFile.setPreferredWidth(490);
TableColumn NotEditable = TblFilePane1.getColumnModel().getColumn(0);
JTextField ScopeIDNE = new JTextField();
ScopeIDNE.setEnabled(false);
TableColumn NotEditableTS = TblFilePane1.getColumnModel().getColumn(1);
JTextField TSIDNE = new JTextField();
TSIDNE.setEnabled(false);
NotEditableTS.setCellEditor(new DefaultCellEditor(TSIDNE));
NotEditable.setCellEditor(new DefaultCellEditor(ScopeIDNE));
dfReq.setCellEditor(new DefaultCellEditor(cmbDfReq));
Border margin = new EmptyBorder(10, 10, 5, 10);
FotterPanelPane1.setBorder(margin);
FotterPanelPane1.add(scrollPane1,BorderLayout.CENTER);
final JPanel BtnPanelPane1 = new JPanel();
JButton BtnDuplicateRow = new JButton("Duplicate Row");
JButton BtnDeleteRowPane1 = new JButton("Delete Row");
BtnPanelPane1.add(BtnDuplicateRow);
BtnPanelPane1.add(BtnDeleteRowPane1);
Pane1.add(FotterPanelPane1,BorderLayout.CENTER);
Pane1.add(BtnPanelPane1,BorderLayout.SOUTH);
frame.add(Pane1);
frame.pack();
BtnDuplicateRow.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
DefaultTableModel model = (DefaultTableModel)TblFilePane1.getModel();
int totalRows = TblFilePane1.getRowCount();
Vector data = model.getDataVector();
int[] rows = TblFilePane1.getSelectedRows();
if(rows.length != 1)
{
JOptionPane.showMessageDialog(null, "Please Select one row to Duplicate !");
}
else
{
Vector row = (Vector) data.elementAt(rows[0]);
row = (Vector) row.clone();
model.addRow(row);
}
}
});
BtnDeleteRowPane1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
int row = TblFilePane1.getSelectedRow();
if(row < 0 )
{
JOptionPane.showMessageDialog(null, "Please Select a Row to Delete !");
return;
}
((DefaultTableModel) TblFilePane1.getModel()).removeRow(row);
}
});
}
public static void main(String args[])
{
new UI();
}
//frame.setMaximumSize(new Dimension(1000,820));
}
单击按钮时,编辑器仍处于活动状态。在删除行之前,需要停止编辑。
您可以将以下内容添加到您的ActionListener:
if (TblFilePane1.isEditing())
TblFilePane1.getCellEditor().stopCellEditing();
您应该将它添加到两个侦听器中。或者,您可能希望查看表停止编辑,以获取您可以在表上设置的属性,以便在表失去焦点时停止编辑。
此外,变量名不应该以大写字母开头。学习并遵循Java约定。
我的Jtable有一个listSelectionListener: 我创建了一个按钮来删除带有事件的Jtable的所有行: 如果我在没有选择任何行的情况下按下按钮,则不会出现错误,但当我选择一行,然后按下按钮时,会出现以下错误: 当表没有ListSseltionListener时,不会发生这种情况。我哪里错了? 提前感谢您的帮助。
我是新来的希望你们能帮我。。。 我是java编程的初学者,我想我对这个问题有点不知所措。 我的程序运行得很好,除了一个让我恼火的小细节。我有一个JTable,第一列有一个按钮,可以从表中删除这一行。它工作得很好,除了当我试图删除表的最后一行时,按钮停留在那里,然后表冻结,我无法删除任何行,因为我收到了一个“越界异常”。但是,当我使用命令表时。getRowCount()); 在删除该行之前和之后,表
我正在用java创建一个没有数据库的库系统程序。(直接使用文件)。 我在删除jtable中的一行时遇到了一个奇怪的问题(也就是从文件中删除)。 有时当我在表格中选择一行并单击删除按钮时,不止一行被删除了! 大多数时候它也能正常工作!! 我的代码: 我的模型类: 用户信息类别: 我的文本文件:
我正在尝试更新JTable(或data?)的行在我对一行执行删除操作后,当选择另一行时,可以编辑所选行。当前删除该行将使已删除行下方的行上移,但如果选择了该行号并尝试进行编辑,则会返回(JOptionPane),就像未选择任何内容一样。它似乎没有“刷新”数据(?)。 这是一个SCCE,希望有人可以运行它并指出问题。我试着尽可能地缩小它,以便于复制/粘贴: 我在这里看到这个问题的各种形式都有一些不同
问题内容: 我需要删除JTable中的所有行。 我已经尝试了以下两种方法: 和 两者都不会删除所有行。有任何想法吗? 问题答案: 以下代码为我工作:
问题内容: 我有一个JTable,我需要删除一行,即选定的行。 所以首先,我得到表模型: 然后是选定的行(如果选择了第二行,则返回1,这是可以理解的,因为行从零开始): 然后,我尝试删除该行: 然后我再次设置表模型: 这实现的是删除完全随机的行。我根本不明白为什么。我已经使用table.setRowSorter(sorter)对表进行了排序,但是我不知道为什么这应该是一个问题。如果绝对需要SSCC