package javacodebook.gui.tablerenderer; import javax.swing.table.AbstractTableModel; /** * Diese Klasse NameTableModel liefert die Inhalte für die JTable. */ public class NameTableModel extends AbstractTableModel { /** * Werte der Tabelle, sind hier hart codiert, könnten natürlich * dynamisch eingebunden werden. Die Werte sind nicht mehr nur vom Typ String, * sondern auch vom Typ Boolean. Der DefaultRenderer wandelt Objekte vom Typ * Boolean automatisch in eine Checkbox Darstellung um. */ private Object dataValues[][] = { { "Andi Arbeit", "Soest", "Terlindenweg",Boolean.TRUE }, { "Manuel Einstellbar", "Karlsruhe", "Kaiserallee",Boolean.FALSE }, { "Sigrid Sörwis", "Berlin", "Winsstrasse",Boolean.FALSE }, { "Miss Mutig", "Stockholm", "Kungshamra",Boolean.FALSE } }; /** * Überschriften der Tabelle, sind hier auch hart codiert. */ private String columnNames[] = { "Name", "Stadt", "Strasse", "Anwesend" }; /** * Die JTable braucht zur Darstellung Informationen über die Spaltenanzahl */ public int getRowCount() { return dataValues.length; } /** * Die JTable braucht zur Darstellung Informationen über die Zeilennanzahl */ public int getColumnCount() { return columnNames.length; } /** * Zur Darstellung der Überschriften benötigt die JTable die Namen. */ public String getColumnName(int column){ return (String)columnNames[column]; } public Class getColumnClass(int column){ return dataValues[0][column].getClass(); } /** * Damit die Checkboxes auch editierbar werden, liefert isCellEditable() * bei der 3. Spalte immer "true" zurück. */ public boolean isCellEditable( int row, int column) { if(column==3) return true; else return false; } /** * Die JTable braucht zur Darstellung die Daten an jeder Position */ public Object getValueAt(int rowIndex, int columnIndex) { return dataValues[rowIndex][columnIndex]; } /** * Wird nur benötigt, wenn die JTable editierbar ist, und dass ist * sie ja in der vierten Spalte. */ public void setValueAt(Object value ,int rowIndex, int columnIndex) { dataValues[rowIndex][columnIndex]=value; fireTableCellUpdated(rowIndex,columnIndex); } } --- Neue Klasse --- package javacodebook.gui.tablerenderer; import javax.swing.*; import javax.swing.table.*; import java.awt.event.*; import java.awt.*; /** * In diesem JFrame wird eine Tabelle platziert. */ public class RendereTableJFrame extends JFrame { /** * Im Konstruktor der Tabelle wird eine Instanz unseres NameTableModels * übergeben, sämtliche Inhalte werden von ihm geliefert. */ private JTable table = new JTable( new NameTableModel() ); /** * JScrollpane stellt per Default die Tabellenüberschriften von * eingebetteten Tabellen dar. Legt man die Tabelle einfach in ein * Panel, würden keine Überschriften erscheinen. */ private JScrollPane scrollPane = new JScrollPane(); private Container content = null; /** * Konstruktor von RendereTableJFrame. */ public RendereTableJFrame(String title) { super(title); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); content = this.getContentPane(); // Eine Scrollpane darf nicht direkt, sondern muss immer // über Ihren Viewport bestückt werden. scrollPane.getViewport().add(table); // Die Spalte "Stadt" bekommt einen selbstgeschriebenen Renderer // jedesmal wenn diese Spalte dargestellt wird, wird der Renderer, in // unserem Fall der ColoredRenderer, gefragt wie sie dargestellt // werden soll TableColumn tc = table.getColumn("Stadt"); tc.setCellRenderer(new ColoredCellRenderer()); // ScrollPane wird auf die contentPane gelegt content.add(scrollPane); } }