2016-11-25 6 views
0

JTableから行を削除する際に問題があります。私のコードこの質問に基づく:私は、選択した行を削除するには、ボタンを押すとHow do you remove selected rows from a JTable?JTableから行を削除しようとすると、多くのエラーメッセージが表示される

public static void removeSelectedRows(JTable table){ 
    DefaultTableModel model = (DefaultTableModel) table.getModel(); 
    int[] rows = table.getSelectedRows(); 
    for (int i = rows.length - 1; i >= 0; i--) { 
     model.removeRow(rows[i]); 
    } 
} 

JButton button = new JButton("Delete selected"); 
button.addActionListener(new ActionListener(){ 
    public void actionPerformed(ActionEvent e) { 
     removeSelectedRows(table); 
    } 
}); 

私は私の端末でエラーメッセージの多くを受け取る:

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: javax.swing.JTable$1 cannot be cast to javax.swing.table.DefaultTableModel 
at ConfFrame.removeSelectedRows(ConfFrame.java:37) 
at ConfFrame$1.actionPerformed(ConfFrame.java:63) 
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022) 
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348) 
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:6533) 
at javax.swing.JComponent.processMouseEvent(JComponent.java:3315) 
at java.awt.Component.processEvent(Component.java:6298) 
at java.awt.Container.processEvent(Container.java:2236) 
at java.awt.Component.dispatchEventImpl(Component.java:4889) 
at java.awt.Container.dispatchEventImpl(Container.java:2294) 
at java.awt.Component.dispatchEvent(Component.java:4711) 
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888) 
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525) 
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466) 
at java.awt.Container.dispatchEventImpl(Container.java:2280) 
at java.awt.Window.dispatchEventImpl(Window.java:2746) 
at java.awt.Component.dispatchEvent(Component.java:4711) 
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758) 
at java.awt.EventQueue.access$500(EventQueue.java:97) 
at java.awt.EventQueue$3.run(EventQueue.java:709) 
at java.awt.EventQueue$3.run(EventQueue.java:703) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) 
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86) 
at java.awt.EventQueue$4.run(EventQueue.java:731) 
at java.awt.EventQueue$4.run(EventQueue.java:729) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) 
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728) 
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) 
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) 
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) 
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) 
+1

例外として、getModel()がDefaultTableModelを返し、それがそうでないと仮定しています。あなたが見ているように、間違っているので、その仮定をしないでください。テーブルにモデルとしてDefaultTableModelを設定する場合は、テーブルを作成してsetModel()を呼び出します。 –

+0

ありがとうございます! – 0573FE491EA798FDCBC849B0E06EDC

+0

あなたが作っている別のエラーですが、明らかではないかもしれません。 'table.getSelectedRows();'は** view **インデックスを返します。 **モデル**から行を削除するには、それらの**表示**インデックスを使用しています! 'JTable.convertRowIndexToModel'を使用して、これらのビューインデックスをモデルインデックスに変換してから、まずモデルインデックスに変換してそれらをモデルから削除する必要があります。 JTableで行をソートするときに重要な理由が分かります。 –

答えて

2

あなたは固定データでテーブルを作成しているので、内部クラスがTableModelとして使用されています。あなたがするTableModelを取得し、DefaultTableModelのにキャストすることができるようになりますあなたのコードで今すぐ

DefaultTableModel model = new DefaultTableModel(...); 
JTable table = new JTable(model); 

は、代わりにあなたはあなたのようなJTableコードで何かを作成する必要があります。

関連する問題