Hi,
ich habe mit ein Objekt erstellt, welches BO_TableCell heisst, dieses Objekt hat ne menge Eigenschaften, wie
- Value // Der Eigentliche Wert
- ToolTipText // ...
- Background
- Foreground
- Horizontal Align
- Vertical Align
....
Halt, was man einer Zelle so zuweisen kann.
Nun gibt es ja den TableCellRenderer. Ich habe mir praktisch den DefaultTableCellRenderer selbst gemacht:
Da dort als Wert ein Objekt übergeben wird, kann man ja nicht nur einen String, sondern z.B. auch mein BO_TableCell-Objekt übergeben.
Ok,
- Daten aus der Datenbank gelesen;
- Daten der Datenbank jeweils in ein BO_TableCell-Objekt gepackt;
- Die BO_TableCell-Objekte alle in ein Object[][] gepackt und dem TableModel gegeben.
Nun wird dem Renderer das Objekt übergeben und dort wird dann je nach String/Integer etc was gemacht.
Also mit setText() wird dann der Text gesetzt.
Soweit klappt das ganze auch 'eigentlich'.
Denn wenn man auf den ersten Blick die Table sieht, dann sieht die vernünftig aus...
Wenn man aber einen Doppelklick auf eine Zelle macht, dann erscheint praktisch 'im Hintergrund' die Adresse von dem Objekt, also dieses Objekt@s7a9s7d9das7 oder so, hab grad kein Beispiel dafür, aber ihr wisst sicher, was ich meine. Der Wert, der im Renderer-Label ist, ist nicht in der Table.
Mit table.setValueAt(x,y,value) habe ich das ganze auch probiert, aber dann spinnt er total und es geht nix mehr...
Im prinzip will ich das editieren dieser Table auch gar nicht erlauben, was mein weiteres Problem ist.
Wie kann ich editieren der Zellen verbieten?
Ich habe auch schon probiert es von einem JTextField abzuleiten und es mit setEditable(false) abzuschalten -> ohne Erfolg...
Zeilenweise soll das markieren aber erlaubt werden, was auch klappt, aber da nur auf dem Renderer-Label der Wert steht und nicht in dem Table, kann ich beim klick auf eine Zeile nicht den Wert aus der ersten Spalte (Die ID) auslesen. Oder wie kann ich den Renderer zum auslesen mit getText() ansprechen? Habe dazu nix gefunden...
Mfg, Matflasch
ich habe mit ein Objekt erstellt, welches BO_TableCell heisst, dieses Objekt hat ne menge Eigenschaften, wie
- Value // Der Eigentliche Wert
- ToolTipText // ...
- Background
- Foreground
- Horizontal Align
- Vertical Align
....
Halt, was man einer Zelle so zuweisen kann.
Nun gibt es ja den TableCellRenderer. Ich habe mir praktisch den DefaultTableCellRenderer selbst gemacht:
Da dort als Wert ein Objekt übergeben wird, kann man ja nicht nur einen String, sondern z.B. auch mein BO_TableCell-Objekt übergeben.
Ok,
- Daten aus der Datenbank gelesen;
- Daten der Datenbank jeweils in ein BO_TableCell-Objekt gepackt;
- Die BO_TableCell-Objekte alle in ein Object[][] gepackt und dem TableModel gegeben.
Nun wird dem Renderer das Objekt übergeben und dort wird dann je nach String/Integer etc was gemacht.
Also mit setText() wird dann der Text gesetzt.
Soweit klappt das ganze auch 'eigentlich'.
Denn wenn man auf den ersten Blick die Table sieht, dann sieht die vernünftig aus...
Wenn man aber einen Doppelklick auf eine Zelle macht, dann erscheint praktisch 'im Hintergrund' die Adresse von dem Objekt, also dieses Objekt@s7a9s7d9das7 oder so, hab grad kein Beispiel dafür, aber ihr wisst sicher, was ich meine. Der Wert, der im Renderer-Label ist, ist nicht in der Table.
Mit table.setValueAt(x,y,value) habe ich das ganze auch probiert, aber dann spinnt er total und es geht nix mehr...
Im prinzip will ich das editieren dieser Table auch gar nicht erlauben, was mein weiteres Problem ist.
Wie kann ich editieren der Zellen verbieten?
Ich habe auch schon probiert es von einem JTextField abzuleiten und es mit setEditable(false) abzuschalten -> ohne Erfolg...
Zeilenweise soll das markieren aber erlaubt werden, was auch klappt, aber da nur auf dem Renderer-Label der Wert steht und nicht in dem Table, kann ich beim klick auf eine Zeile nicht den Wert aus der ersten Spalte (Die ID) auslesen. Oder wie kann ich den Renderer zum auslesen mit getText() ansprechen? Habe dazu nix gefunden...
Code:
public class MskTblRenderer extends JLabel implements TableCellRenderer {
...
public MskTblRenderer () {
super();
initialize();
}
public String RendererToolTipParser(String s) {
final StringBuffer sb = new StringBuffer(s.length() * 2);
final StringCharacterIterator iterator = new StringCharacterIterator(s);
char character = iterator.current();
while (character != StringCharacterIterator.DONE) {
if (character == '\n')
sb.append("
");
else
sb.append(character);
character = iterator.next();
}
return sb.toString();
}
public Component getTableCellRendererComponent(
JTable Table,
Object Value,
boolean isSelected,
boolean hasFocus,
int Row,
int Column) {
BO_TableCell tbc = (BO_TableCell) Value;
// Grundeinstellungen
setIcon(null);
setText(null);
setToolTipText(null);
// Generelle Eigenschaften
// if(hasFocus()) {
// setBackground(Color.blue);
// } else {
// setForeground(tbc.getForegroundColor());
// setBackground(tbc.getBackgroundColor());
// }
// if(isSelected) {
// setBackground(Color.red);
// } else {
// setForeground(tbc.getForegroundColor());
// setBackground(tbc.getBackgroundColor());
// }
setForeground(Color.blue);
setFont(tbc.getFont());
// Icon, ImageIcon
if((tbc.getIcon() instanceof Icon ||
tbc.getIcon() instanceof ImageIcon) &&
tbc.getIcon() != null &&
tbc.getIcon().toString() != null &&
tbc.getIcon().toString().length() > 0) {
setHorizontalAlignment(SwingConstants.CENTER);
setIcon((Icon)tbc.getIcon());
}
// String
else if(tbc.getValue() instanceof String){
// setForeground(tbc.getForegroundColor());
setHorizontalAlignment(SwingConstants.LEFT);
setText(tbc.getValue().toString());
setToolTipText(tbc.getToolTipText());
}
// Integer
else if(tbc.getValue() instanceof Integer) {
setHorizontalAlignment(SwingConstants.CENTER);
setText(tbc.getValue().toString());
setToolTipText(tbc.getToolTipText());
}
// Alles andere
else {
// String v = tbc.getValue().toString();
// Value = v;
// setText(v);
setToolTipText(tbc.getToolTipText());
}
ToolTipManager.sharedInstance().setDismissDelay(30000);
setToolTipText("<html>" + RendererToolTipParser(tbc.getToolTipText()) + "</html>");
return this;
}
}
Mfg, Matflasch