Ik heb een TableCellRenderer/Editor (zelfde klasse, implementeerd beide interfaces) die behoorlijk raar reageerd op wijzigingen
Omdat elke rij andere acties kan hebben, wil ik graag deze acties per rij aangeven in 1 kolom.
Elke rij kan dus meerdere acties hebben. Ik heb geen enkele voorbeelden kunnen vinden waar ze meerdere jbuttons in een kolom kwijt kunnen dus ik ben zelf iets gaan prutsen. ipv van Jbuttons als values door te geven geef ik een array AbstractActions door aan de cell renderer.
De cell renderer gooit vervolgens de jpanel leeg en itereerd over de action array toe en voegt de buttons toe. Als ik de status van de rij verander, dan zou er andere knoppen moeten verschijnen. Dit gebeurt alleen als ik de kolom resize. ok..repaint probleems dus...maar nee hoor...
Invalidate, Validate, Repaint, Revalidate lijken allemaal geen effect te hebben. Ook blijven sommige knoppen staan waar ze allang vervangen moeten worden door andere.
Dit soort rare effecten krijg ik dan:

De code voor de renderer/Editor
Kan ik eigenlijk wel acties pasen naar een cell renderer? (mij lijkt van wel)
Zijn er alternatieven voor het plaatsen van meerdere buttons in een kolom?
Of is het beter om elke button in een aparte kolom te stoppen (misschein wel makkelijker)
Omdat elke rij andere acties kan hebben, wil ik graag deze acties per rij aangeven in 1 kolom.
Elke rij kan dus meerdere acties hebben. Ik heb geen enkele voorbeelden kunnen vinden waar ze meerdere jbuttons in een kolom kwijt kunnen dus ik ben zelf iets gaan prutsen. ipv van Jbuttons als values door te geven geef ik een array AbstractActions door aan de cell renderer.
De cell renderer gooit vervolgens de jpanel leeg en itereerd over de action array toe en voegt de buttons toe. Als ik de status van de rij verander, dan zou er andere knoppen moeten verschijnen. Dit gebeurt alleen als ik de kolom resize. ok..repaint probleems dus...maar nee hoor...
Invalidate, Validate, Repaint, Revalidate lijken allemaal geen effect te hebben. Ook blijven sommige knoppen staan waar ze allang vervangen moeten worden door andere.
Dit soort rare effecten krijg ik dan:

De code voor de renderer/Editor
Java:
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
| /* * Created on 7-mrt-2006 * Copyright: (c) 2004-2005 * Company: Cavendish Kinetics B.V. * * @author bart.veenstra * @version $Revision: 1.1 $ */ package eu.promenade.client.tracking.ui.components.table.editor; import java.awt.Component; import java.util.EventObject; import javax.swing.Action; import javax.swing.BoxLayout; import javax.swing.JButton; import javax.swing.JPanel; import javax.swing.JTable; import javax.swing.event.CellEditorListener; import javax.swing.table.TableCellEditor; import javax.swing.table.TableCellRenderer; public class PMultipleButtonEditor extends JPanel implements TableCellEditor, TableCellRenderer { public PMultipleButtonEditor() { super(); setLayout(new BoxLayout(this, BoxLayout.LINE_AXIS)); } public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { assembleComponent(value,table); return this; } public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { assembleComponent(value,table); return this; } private void assembleComponent(Object value, JTable table) { invalidate(); removeAll(); Action[] actions = (Action[]) value; for (int i = 0; i < actions.length; i++) add(createButton(actions[i])); repaint(); table.invalidate(); table.repaint(); } public Object getCellEditorValue() { return null; } public boolean isCellEditable(EventObject anEvent) { return true; } public boolean shouldSelectCell(EventObject anEvent) { return false; } public boolean stopCellEditing() { return true; } public void cancelCellEditing() {} public void addCellEditorListener(CellEditorListener l) {} public void removeCellEditorListener(CellEditorListener l) {} private JButton createButton(Action action) { JButton btn = new JButton(action); return btn; } } |
Kan ik eigenlijk wel acties pasen naar een cell renderer? (mij lijkt van wel)
Zijn er alternatieven voor het plaatsen van meerdere buttons in een kolom?
Of is het beter om elke button in een aparte kolom te stoppen (misschein wel makkelijker)