Hallo zusammen,
Ich möchte gerade einen speziellen JTable darstellen.
Gemäß dem MVC - Muster findet auch eine Trennung zwischen Model und View statt.
Um praktisch mehr Einfluß auf die Darstellung des Tables zu nehmen,
wird ein eigenes Model erzeugt, dass AbstractTableModel implementiert.
In der überschriebenen Methode
wird dafür gesorgt, dass die Classe des jeweiligen Spalteninhalts zurückgegeben wird,
damit der JTable nach Klasse selektiert die Darstellung vornimmt.
Was ist jetzt, wenn ich verschiedene Inhalte innerhalb einer Spalte darstellen will?
Nachfolgender Code soll das veranschaulichen, da ich 3 verschiedene Komponenten habe, die ich jetzt in 3 Tabellen darstelle.
Mein Ziel ware es die verschiedenen Komponenten in einer Spalte darzustellen.
Danke und viele Grüße
Ich möchte gerade einen speziellen JTable darstellen.
Gemäß dem MVC - Muster findet auch eine Trennung zwischen Model und View statt.
Um praktisch mehr Einfluß auf die Darstellung des Tables zu nehmen,
wird ein eigenes Model erzeugt, dass AbstractTableModel implementiert.
In der überschriebenen Methode
Java:
public Class<? extends Object> getColumnClass(int columnIndex)//..
damit der JTable nach Klasse selektiert die Darstellung vornimmt.
Was ist jetzt, wenn ich verschiedene Inhalte innerhalb einer Spalte darstellen will?
Nachfolgender Code soll das veranschaulichen, da ich 3 verschiedene Komponenten habe, die ich jetzt in 3 Tabellen darstelle.
Mein Ziel ware es die verschiedenen Komponenten in einer Spalte darzustellen.
Danke und viele Grüße
Java:
import java.awt.Component;
import java.awt.GridLayout;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableCellRenderer;
public class BookTableMain {
public static void main(String[] args) {
new BookTableMain().initComponents();
}
private void initComponents() {
JFrame f = new JFrame();
f.add(new JScrollPane(createPanelWithTables()));
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.pack();
f.setVisible(true);
}
/*
* TODO Die verschiedenen Objekte in einer Tabelle darstellen
*/
private JPanel createPanelWithTables() {
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(3, 1));
panel.add(createFirstTable());
panel.add(createSecondTable());
panel.add(createThirdTable());
return panel;
}
private JTable createFirstTable() {
Vector<Vector<Object>> tableData = new Vector<Vector<Object>>();
Vector<Object> rowData = new Vector<Object>();
rowData.add("Meerblick");
rowData.add(new Boolean(false));
tableData.add(rowData);
return new JTable(new MyAbstractTableModel(tableData));
}
private JTable createSecondTable() {
Vector<Vector<Object>> tableData = new Vector<Vector<Object>>();
Vector<Object> rowData = new Vector<Object>();
rowData.add("Zimmer");
rowData.add(new Integer(1));
tableData.add(rowData);
return new JTable(new MyAbstractTableModel(tableData));
}
private JTable createThirdTable() {
Vector<Vector<Object>> tableData = new Vector<Vector<Object>>();
Vector<Object> rowData = new Vector<Object>();
rowData.add("Preis ermitteln");
rowData.add(new JButton());
tableData.add(rowData);
JTable table = new JTable(new MyAbstractTableModel(tableData));
table.setDefaultRenderer(JButton.class, new JButtonRenderer());
return table;
}
/*
* *** Table-Model ***
*/
@SuppressWarnings("serial")
private class MyAbstractTableModel extends AbstractTableModel {
private Vector<Vector<Object>> tableData;
public MyAbstractTableModel(Vector<Vector<Object>> tableData) {
this.tableData = tableData;
}
@Override
public Class<? extends Object> getColumnClass(int columnIndex) {
return tableData.get(0).get(columnIndex).getClass();
}
@Override
public void setValueAt(Object obj, int rowIndex, int columnIndex) {
tableData.get(rowIndex).set(columnIndex, obj);
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
return columnIndex == 1;
}
// inherit from AbstractTableModel
@Override
public int getRowCount() {
return tableData.size();
}
@Override
public int getColumnCount() {
return 2;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
return tableData.get(rowIndex).get(columnIndex);
}
}
/*
* *** Renderer für JButton ***
*/
@SuppressWarnings("serial")
private class JButtonRenderer extends JButton implements TableCellRenderer {
public JButtonRenderer() {
super();
}
@Override
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus, int row,
int column) {
if (value instanceof JButton) {
return this;
} else
return null;
}
}
}