在java中,带按钮的单元格不被视为选定单元格

在java中,带按钮的单元格不被视为选定单元格,java,swing,jtable,jbutton,abstraction,Java,Swing,Jtable,Jbutton,Abstraction,我有一个专栏(7),有一个按钮,该操作只是删除该行。我还有鼠标单击事件到表中。我希望当用户单击“删除”按钮时,它将删除该行和其他获得所选单元格值的内容。我的删除操作工作正常,但当我单击该按钮时,会引发异常,但当我单击同一单元格中的其他单元格时行它为我提供了正确的行和列数据。我不理解实际问题。按钮是否不像同一行中的其他单元格那样被视为单击的单元格。。。? 这是我的主要构造器 public SellWindow() { //dafault constructor String

我有一个专栏(7),有一个按钮,该操作只是删除该行。我还有鼠标单击事件到表中。我希望当用户单击“删除”按钮时,它将删除该行和其他获得所选单元格值的内容。我的删除操作工作正常,但当我单击该按钮时,会引发异常,但当我单击同一单元格中的其他单元格时行它为我提供了正确的行和列数据。我不理解实际问题。按钮是否不像同一行中的其他单元格那样被视为单击的单元格。。。? 这是我的主要构造器

    public SellWindow() {   //dafault constructor

    String title[]={"Qty","Code","Name","vat","Discount","Unit Value","Line Total","Delete"};
    table.setColumnIdentifiers(title);
    this.entry.setModel(table); //entry is the jtable
    //entry.getColumn("Delete");

    ButtonColumn buttonColumn = new ButtonColumn(entry, delete,7);
    buttonColumn.setMnemonic(KeyEvent.VK_D);

 }
这是我的纽扣课

    public ButtonColumn(JTable table, Action action, int column)
{
    this.table = table;
    this.action = action;

    renderButton = new JButton();
    editButton = new JButton();
    editButton.setFocusPainted( false );
    editButton.addActionListener( this );
    originalBorder = editButton.getBorder();
    setFocusBorder( new LineBorder(Color.BLUE) );

    TableColumnModel columnModel = table.getColumnModel();
    columnModel.getColumn(column).setCellRenderer( this );
    columnModel.getColumn(column).setCellEditor( this );
    table.addMouseListener( this );
}
这是我的删除操作代码

   Action delete = new AbstractAction(){
        public void actionPerformed(ActionEvent e){
             JTable table = (JTable)e.getSource();
             int modelRow = Integer.valueOf( e.getActionCommand() );
            ((DefaultTableModel)table.getModel()).removeRow(modelRow);
            getIndexRow();  // i add this here just to check but same exception
        }
};
这是我的表格代码

    private void entryMouseClicked(java.awt.event.MouseEvent evt) {                                   
        getIndexRow(); 

  }
下面是我获取表数据的代码

    private void getIndexRow(){  //this works fine for other cells but not for the cell holding the delete button
    int row=entry.getSelectedRow();
    Object o=entry.getModel().getValueAt(row,6);
    System.out.println(row);
    System.out.println((String)o);
}
下面是插入行的代码(单击“输入”按钮可获得产品信息)

例外情况

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: -1
at java.util.Vector.elementData(Vector.java:730)
at java.util.Vector.elementAt(Vector.java:473)
at javax.swing.table.DefaultTableModel.getValueAt(DefaultTableModel.java:649)
at SellWindow.getIndexRow(SellWindow.java:581)
at SellWindow.access$000(SellWindow.java:26)
at SellWindow$2.actionPerformed(SellWindow.java:49)
at ButtonColumn.actionPerformed(ButtonColumn.java:190)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6505)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
at java.awt.Component.processEvent(Component.java:6270)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4861)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4687)
at javax.swing.plaf.basic.BasicTableUI$Handler.repostEvent(BasicTableUI.java:948)
at javax.swing.plaf.basic.BasicTableUI$Handler.mouseReleased(BasicTableUI.java:1164)
at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:290)
at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:289)
at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:289)
at java.awt.Component.processMouseEvent(Component.java:6505)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
at java.awt.Component.processEvent(Component.java:6270)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4861)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2719)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:703)
at java.awt.EventQueue.access$000(EventQueue.java:102)
at java.awt.EventQueue$3.run(EventQueue.java:662)
at java.awt.EventQueue$3.run(EventQueue.java:660)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:676)
at java.awt.EventQueue$4.run(EventQueue.java:674)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:673)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:244)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:163)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:147)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:139)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:97)

显示了一种方法。

那么,向您抛出的异常是什么呢?为了更好地帮助您,请尽快发布一个简短、可运行、可编译、大约在上午一点发布的问题,其中包含TableModel的硬编码值,否则在此处搜索,每周会有一个以上的问题询问similair questionavax.swing.table.DefaultTableModel.getValueAt;ellWindow.getIndexRow;“AWT-EventQueue-0”java.lang.ArrayIndexOutOfBoundsException:-1您在注释中发布异常报告的方式不可读。请将其发布在问题中。添加了整个例外显示您的教程..太棒了。使用此按钮,我制作了我的按钮。但问题是,当我按下按钮时,我没有获取所选行和列的值,它会抛出一个异常@camickr。教程显示了如何获取单击按钮的行。
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: -1
at java.util.Vector.elementData(Vector.java:730)
at java.util.Vector.elementAt(Vector.java:473)
at javax.swing.table.DefaultTableModel.getValueAt(DefaultTableModel.java:649)
at SellWindow.getIndexRow(SellWindow.java:581)
at SellWindow.access$000(SellWindow.java:26)
at SellWindow$2.actionPerformed(SellWindow.java:49)
at ButtonColumn.actionPerformed(ButtonColumn.java:190)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6505)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
at java.awt.Component.processEvent(Component.java:6270)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4861)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4687)
at javax.swing.plaf.basic.BasicTableUI$Handler.repostEvent(BasicTableUI.java:948)
at javax.swing.plaf.basic.BasicTableUI$Handler.mouseReleased(BasicTableUI.java:1164)
at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:290)
at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:289)
at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:289)
at java.awt.Component.processMouseEvent(Component.java:6505)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
at java.awt.Component.processEvent(Component.java:6270)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4861)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2719)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:703)
at java.awt.EventQueue.access$000(EventQueue.java:102)
at java.awt.EventQueue$3.run(EventQueue.java:662)
at java.awt.EventQueue$3.run(EventQueue.java:660)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:676)
at java.awt.EventQueue$4.run(EventQueue.java:674)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:673)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:244)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:163)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:147)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:139)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:97)