Ich bin gerade dabei, mich mit JLists zu befassen. Ich habe nun eine JList mit einem JButton und einer JCheckBox.
Damit die beiden auch angezeigt werden, habe ich die CellRenderer verändert. Nun ist mein Problem, dass
1. Die Farben ohne Selection nicht passen (siehe Bild 1).
2. Die Farben mit Selection nicht passen (siehe Bild 2).
3. Der Text auf dem JButton erst nach einem ersten Klick erscheint (siehe CellEditor).
Ich hoffe, jemand hat die Lust und das nötige Handwerkszeug hier mal drüber zu schauen.
BTW: ich benutze NICHT das null-Layout
1.Teil: Table wird zum Teil erstellt
3. Teil: Button Renderer
4. Teil: ButtonEditor
5. Teil: CheckBoxEditor
Vielen Dank!
Damit die beiden auch angezeigt werden, habe ich die CellRenderer verändert. Nun ist mein Problem, dass
1. Die Farben ohne Selection nicht passen (siehe Bild 1).
2. Die Farben mit Selection nicht passen (siehe Bild 2).
3. Der Text auf dem JButton erst nach einem ersten Klick erscheint (siehe CellEditor).
Ich hoffe, jemand hat die Lust und das nötige Handwerkszeug hier mal drüber zu schauen.
BTW: ich benutze NICHT das null-Layout
1.Teil: Table wird zum Teil erstellt
Java:
table.getColumn("Supprimer").setCellRenderer(
new DefaultTableCellRenderer()
{
private static final long serialVersionUID = 1L;
public Component getTableCellRendererComponent(
JTable table, Object value, boolean isSelected,
boolean hasFocus, int row, int column)
{
JCheckBox checkBox = new JCheckBox();
checkBox.setSelected(false);
isSelected=true;
if (isSelected)
{
setForeground(table.getSelectionForeground());
setBackground(table.getSelectionBackground());
} else
{
setForeground(table.getForeground());
setBackground(UIManager
.getColor("JCheckBox.background"));
}
return checkBox;
}
});
3. Teil: Button Renderer
Java:
class ButtonRenderer extends JButton implements TableCellRenderer
{
private static final long serialVersionUID = 1L;
public ButtonRenderer()
{
setOpaque(true);
}
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column)
{
if (isSelected)
{
setForeground(table.getSelectionForeground());
setBackground(table.getSelectionBackground());
} else
{
setForeground(table.getForeground());
setBackground(UIManager.getColor("Button.background"));
}
setText((value == null) ? "" : value.toString());
return this;
}
}
4. Teil: ButtonEditor
Java:
class ButtonEditor extends DefaultCellEditor
{
private static final long serialVersionUID = 1L;
protected JButton button;
private boolean isPushed;
public ButtonEditor(JCheckBox checkBox)
{
super(checkBox);
button = new JButton("Plus d'infos");
button.setOpaque(true);
button.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
fireEditingStopped();
}
});
}
public Component getTableCellEditorComponent(JTable table, Object value,
boolean isSelected, int row, int column)
{
if (isSelected)
{
button.setForeground(table.getSelectionForeground());
button.setBackground(table.getSelectionBackground());
} else
{
button.setForeground(table.getForeground());
button.setBackground(table.getBackground());
}
button.setText("Plus d'infos");
isPushed = true;
return button;
}
public Object getCellEditorValue()
{
if (isPushed)
{
// HIER MUSS DAS REIN; WAS NACH EINEM KLICK AUF DEN "PLUS D'INFO" BUTTON PASSIERT
// ZB EIN NEUES FENSTER MIT EINEM JTABLE MIT ALLEN ABHOLUNGEN UND EINEM BUTTON FÜR
// NEUE ABHOLUNGEN !!!
}
isPushed = false;
return new String("Plus d'infos");
}
public boolean stopCellEditing()
{
isPushed = false;
return super.stopCellEditing();
}
protected void fireEditingStopped()
{
super.fireEditingStopped();
}
}
5. Teil: CheckBoxEditor
Java:
class CheckBoxEditor extends DefaultCellEditor
{
private static final long serialVersionUID = 1L;
private JCheckBox check;
private boolean isPushed;
public CheckBoxEditor(JCheckBox checkBox)
{
super(checkBox);
check = new JCheckBox();
check.setOpaque(true);
check.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
fireEditingStopped();
}
});
}
public Component getTableCellEditorComponent(JTable table, Object value,
boolean isSelected, int row, int column)
{
isSelected=true;
if (isSelected)
{
check.setForeground(table.getSelectionForeground());
check.setBackground(table.getSelectionBackground());
} else
{
check.setForeground(table.getForeground());
check.setBackground(table.getBackground());
}
isPushed = true;
return check;
}
public Object getCellEditorValue()
{
if (isPushed)
{
JOptionPane.showMessageDialog(null, "Client supprimé, re-ouvrez 'tous les clients'");
//ES WIRD NOCH NIEMAND GELÖSCHT!!!
System.out.println(table.getSelectedRow()) ;
table.remove(table.getSelectedRow());
creator.getClients().remove(table.getSelectedRow());
table.validate();
table.repaint();
}
isPushed = false;
return Boolean.TRUE;
}
public boolean stopCellEditing()
{
isPushed = false;
return super.stopCellEditing();
}
protected void fireEditingStopped()
{
super.fireEditingStopped();
}
}
Vielen Dank!