ERLEDIGT
NEIN
NEIN
ANTWORTEN
4
4
ZUGRIFFE
8573
8573
EMPFEHLEN
-
Hallo alle zusammen,
ich habe mir für meine JTable einen eigenen Renderer geschrieben. Zwei Spalten der Tabelle beinhalten boolsche Werte. Diese stelle ich al Checkbox dar. In meinem Renderer gebe ich bei den entsprechenden Spaltenindexen bei getTableCellRendererComponent(...)
ein Label mit einer Checkbox zurück. Mein Problem hierbei ist, dass ich es nicht schaffe die Checkbox zentriert darzustellen... ich habe bereits alle alignment-Methoden vom JLabel ausprobiert, diverse Layoutmanager verwendet und dabei jedesmal eine linksbündige Ausgabe bekommen. BorderLayout.Center bringt ebenfalls nichts, da unter left keine Komponente steht und somit die ganze Zelle zu Center wird. Dabei steht die Checkbox dann ebenfalls links. Mit einem JPanel und einer Checkbox steht die Checkbox zwar horizontal mittig in der Zelle, allerdings vertikal um ein paar Pixel nach unten versetzt :o(
Kann mir in diesem Fall jemand helfen?
Vielen Dank,
mfg. Markus
-
08.12.04 00:03 #2
Hallo,
eigentlich brauchst Du für eine CheckBox keinen CellRenderer zu schreiben, es reicht schon, wenn das TableModel für die entsprechende Spalte Boolean.class liefert:
Code :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
import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableModel; public class TableTest { public static void main(String[] args) { JFrame frame = new JFrame("TableTest"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); final String[] colNames = {"Column 1", "Column 2"}; final Object[][] data = new Object[][] { {Boolean.FALSE, "value 1"}, {Boolean.TRUE, "value 2"}, {Boolean.FALSE, "value 3"}}; final TableModel model = new DefaultTableModel(data, colNames) { public Class getColumnClass(int columnIndex) { return (columnIndex == 0) ? Boolean.class : String.class; } }; JTable table = new JTable(model); frame.getContentPane().add(new JScrollPane(table)); frame.setSize(400, 250); frame.setVisible(true); } }
Gruß
VincentGeändert von Vincentius (08.12.04 um 10:03 Uhr)
-
Hallo,
das hatte ich zuvor so. Allerdings möchte ich in meiner JTable Pflichtfelder (Spalten) farblich hinterlegen. Hierfür habe ich keine andere Möglichkeit gefunden als einen eigenen CellRenderer zu schreiben... und dieser macht bei mir wie oben beschrieben bei den Checkboxen Probleme mit der Zellausrichtung...
Mfg. Markus
-
08.12.04 10:01 #4
Hallo,
dann könntest Du versuchen, in Deinem Renderer die CheckBox selbst zurückzugeben, ohne sie erst in einen Container zu packen:
GrußCode :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.Color; import java.awt.Component; import javax.swing.JCheckBox; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.SwingConstants; import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableModel; public class TableTest2 { public TableTest2() { JFrame frame = new JFrame("TableTest2"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); final String[] colNames = {"Column 1", "Column 2"}; final Object[][] data = new Object[][] { {Boolean.FALSE, "value 1"}, {Boolean.TRUE, "value 2"}, {Boolean.FALSE, "value 3"}}; final TableModel model = new DefaultTableModel(data, colNames) { public Class getColumnClass(int columnIndex) { return (columnIndex == 0) ? Boolean.class : String.class; } }; JTable table = new JTable(model); table.setDefaultRenderer(Boolean.class, new ColoredCellRenderer()); frame.getContentPane().add(new JScrollPane(table)); frame.setSize(400, 250); frame.setVisible(true); } public static void main(String[] args) { new TableTest2(); } private class ColoredCellRenderer extends DefaultTableCellRenderer { public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { if (value instanceof Boolean) { boolean enabled = ((Boolean) value).booleanValue(); final JCheckBox box = new JCheckBox(); box.setHorizontalAlignment(SwingConstants.CENTER); box.setSelected(enabled); // die Farben musst Du natürlich von anderen Kriterien abhängig machen // hier ist nur ein Beispiel if (enabled) { box.setBackground(Color.GREEN); } else { box.setBackground(Color.RED); } return box; } return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); } } }
Vincent
-
Super, vielen Dank!
Funktioniert
Ich hatte anfangs die CheckBox ohne Container zurückgegeben... allerdings nicht das Alignment auf CheckBox - Ebene gesetzt
Ich bin davon ausgegangen, dass ich einem Container ein Alignment setzen muss und das der Container dann dafür sorgt, dass seine Komponenten in ihm auf die Mitte zentriert werden...
Mfg. Markus
Ähnliche Themen
-
Checkbox/jumpmenu in php will nicht angezeigt werden
Von Kristkindl im Forum PHPAntworten: 6Letzter Beitrag: 07.07.10, 16:14 -
Eigener Blog: Kommentare werden mehrfach angezeigt
Von Eingeweidemann im Forum PHPAntworten: 7Letzter Beitrag: 07.06.10, 20:22 -
Eigener Markenname wird gesucht
Von srkn61 im Forum Gründung & GewerbeAntworten: 9Letzter Beitrag: 29.10.09, 20:40 -
Eigener ListCellRenderer - Einträge werden nicht als selektiert angezeigt
Von mki_germo im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 1Letzter Beitrag: 01.09.09, 14:40 -
Checkbox nach Neuladen angezeigt lassen
Von mkoeni1 im Forum Javascript & AjaxAntworten: 6Letzter Beitrag: 20.12.07, 14:13





Zitieren
Login





