bonjour,
j'ai une jtable dans laquelle j'ai une colonne avec un éditor et renderer Jbutton.
lorque je clique sur le bouton, la ligne doit se supprimer.
lorque je passe par un bouton qui est en dehors de la jtable je n'ai pas de message d'erreur.
par contre avec le bouton intégré à la ligne de la jtable, le bouton reste affiché, la ligne est effacée, mais il y a un problème de rafraichissement.
code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69 import java.awt.Component; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.EventObject; import javax.swing.AbstractCellEditor; import javax.swing.DefaultCellEditor; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JTable; import javax.swing.event.CellEditorListener; import javax.swing.table.TableCellEditor; import javax.swing.table.TableCellRenderer; import javax.swing.table.TableModel; @SuppressWarnings("serial") public class InvoiceTableCellEditorButton extends AbstractCellEditor implements TableCellEditor { private JButton button; public InvoiceTableCellEditorButton() { button = new JButton(); button.setBorderPainted(false); } @Override public Component getTableCellEditorComponent(final JTable table, Object value, boolean isSelected, final int row, int column) { ImageIcon monImage=new ImageIcon(getClass().getResource("/Images/delete.png")); button.setIcon(monImage); button.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { InvoiceCorpsmodel model; model = (InvoiceCorpsmodel) table.getModel(); System.out.println("Index row : "+row+ " nbre row : "+model.getRowCount()); if (model.getRowCount()==0){ InvoiceApplication.buttonTest().requestFocus(); } model.removeRow(row); //button.validate(); //button.repaint(); //InvoiceApplication.getTableCorpsInvoice().repaint(); //InvoiceApplication.getFrame().repaint(); InvoiceApplication.getScroll().repaint(); if (row==0) { //InvoiceApplication.setCellSelect(row, 0); } else if (row>0){ //InvoiceApplication.setCellSelect(row, 0); } } }) ; return button; } @Override public Object getCellEditorValue() { return false; } }
lors de la suppression le fond blanc de la ligne venant être supprimée et le button reste affiché. lorsque je clique sur cette ligne j'ai le message d'erreur suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 at java.util.ArrayList.RangeCheck(ArrayList.java:547) at java.util.ArrayList.get(ArrayList.java:322) at Invoice.InvoiceCorpsmodel.setValueAt(InvoiceCorpsmodel.java:94) at javax.swing.JTable.setValueAt(JTable.java:2710) at javax.swing.JTable.editingStopped(JTable.java:4712) at javax.swing.AbstractCellEditor.fireEditingStopped(AbstractCellEditor.java:125) at javax.swing.AbstractCellEditor.stopCellEditing(AbstractCellEditor.java:68) at javax.swing.plaf.basic.BasicTableUI$Handler.mousePressed(BasicTableUI.java:980) at java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:263) at java.awt.Component.processMouseEvent(Component.java:6260) at javax.swing.JComponent.processMouseEvent(JComponent.java:3267) at java.awt.Component.processEvent(Component.java:6028) at java.awt.Container.processEvent(Container.java:2041) at java.awt.Component.dispatchEventImpl(Component.java:4630) at java.awt.Container.dispatchEventImpl(Container.java:2099) at java.awt.Component.dispatchEvent(Component.java:4460) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4235) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168) at java.awt.Container.dispatchEventImpl(Container.java:2085) at java.awt.Window.dispatchEventImpl(Window.java:2478) at java.awt.Component.dispatchEvent(Component.java:4460) at java.awt.EventQueue.dispatchEvent(EventQueue.java:599) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161) at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
je pense que c'est un problème de mise à jour de l'affichage, puisque lorque je redimensionne la JFrame qui contien la JTable, la ligne blanche et le bouton disparaissent.
merci de vos solutions.
Partager