Virusbeatboxing
Gebruiker
- Lid geworden
- 11 nov 2011
- Berichten
- 41
Beste,
ik heb in mijn programma nood aan component waarbij men, net zoals bij een JTable, rijen kan toevoegen. Deze component bestaat uit 2 kolommen. Wat er zo speciaal is aan deze component is dat deze in elke cel een JComboBox moet hebben. Daarom ontwikkelde ik zo een component op basis van TableCellRenderers.
Ik maak ten eerste een JTable met een DefaultTableModel:
Vervolgens voeg ik aan elke kolom mijn custom made CellRenderer en CellEditor toe:
Hier is de code van deze Renderer en Editor:
U vraagt zich waarschijnlijk af wat mijn probleem is? Wel het zit zo. Een gebruiker kan een x-aantal rijen aan deze component toevoegen. Elke rij bevat een JComboBox en de waarden in deze JComboBox zijn ook de juiste. De gebruiker kan zonder enige problemen zijn keuze maken.
Vervolgens kan hij ook deze waarden opslaan in de database.
Later moeten deze waarden uit de database gehaald worden waarmee de component moeten opgevuld worden. Het enige probleem is nu, hoe vul ik de JComboBoxen in deze component op? Ik heb reeds alles geprobeerd.
Ik probeerde reeds om door elke cell te loopen in deze component en van elke cell de renderer en editor op te vragen, te parsen naar een JComboBoxModel en vervolgens de .setSelectedItem() hiervan op te roepen. Zie de code: (geen 100% clean code maar is gewoon om te testen)
Alles zonder enige succes! JComboBoxen blijven leeg.
Kan iemand mij een suggestie geven? Alvast HARTELIJK bedankt!
ik heb in mijn programma nood aan component waarbij men, net zoals bij een JTable, rijen kan toevoegen. Deze component bestaat uit 2 kolommen. Wat er zo speciaal is aan deze component is dat deze in elke cel een JComboBox moet hebben. Daarom ontwikkelde ik zo een component op basis van TableCellRenderers.
Ik maak ten eerste een JTable met een DefaultTableModel:
Code:
model = new DefaultTableModel();
table = new JTable(model);
table.setRowHeight(23);
table.setRowSelectionAllowed(true);
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
// Add some columns
model.addColumn("Recipient", new Object[] {});
model.addColumn("Role", new Object[] {});
Vervolgens voeg ik aan elke kolom mijn custom made CellRenderer en CellEditor toe:
Code:
TableColumn recipientsColumn = table.getColumnModel().getColumn(0);
recipientsColumn.setCellEditor(new MyComboBoxEditor(recipients));
recipientsColumn.setCellRenderer(new MyComboBoxRenderer(recipients));
TableColumn rolesColumn = table.getColumnModel().getColumn(1);
rolesColumn.setCellEditor(new MyComboBoxEditor(roles));
rolesColumn.setCellRenderer(new MyComboBoxRenderer(roles));
Hier is de code van deze Renderer en Editor:
Code:
public class MyComboBoxRenderer extends JComboBox implements TableCellRenderer {
public MyComboBoxRenderer(Object[] items) {
super(items);
}
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus, int row,
int column) {
if (isSelected && hasFocus) {
if (value != null) {
if (value instanceof User) {
User u = (User) value;
model.setValueAt(roles[u.getRoleID() - 1], row,column + 1);
}
}
super.setBackground(table.getSelectionBackground());
} else {
setForeground(table.getForeground());
setBackground(table.getBackground());
}
// Select the current value
setSelectedItem(value);
return this;
}
}
public class MyComboBoxEditor extends DefaultCellEditor {
public MyComboBoxEditor(Object[] items) {
super(new MyComboBoxRenderer(items));
}
}
U vraagt zich waarschijnlijk af wat mijn probleem is? Wel het zit zo. Een gebruiker kan een x-aantal rijen aan deze component toevoegen. Elke rij bevat een JComboBox en de waarden in deze JComboBox zijn ook de juiste. De gebruiker kan zonder enige problemen zijn keuze maken.
Vervolgens kan hij ook deze waarden opslaan in de database.
Later moeten deze waarden uit de database gehaald worden waarmee de component moeten opgevuld worden. Het enige probleem is nu, hoe vul ik de JComboBoxen in deze component op? Ik heb reeds alles geprobeerd.
Ik probeerde reeds om door elke cell te loopen in deze component en van elke cell de renderer en editor op te vragen, te parsen naar een JComboBoxModel en vervolgens de .setSelectedItem() hiervan op te roepen. Zie de code: (geen 100% clean code maar is gewoon om te testen)
Code:
MyComboBoxRenderer mcbr = null;
int teller = 0;
for(int row = 0; row < model.getRowCount(); row++)
{
for(int column = 0; column < model.getColumnCount(); column++)
{
mcbr = (MyComboBoxRenderer) table.getCellRenderer(row, column);
if(column == 0)
mcbr.getModel().setSelectedItem(rolesList.get(teller));
if(column == 1)
mcbr.getModel().setSelectedItem(rolesList.get(teller+1));
}
teller+=2;
}
Alles zonder enige succes! JComboBoxen blijven leeg.
Kan iemand mij een suggestie geven? Alvast HARTELIJK bedankt!