import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;
import javax.swing.border.*;
import java.util.*;
public class RTable
extends JTable
{
private static final int TITEL = 0;
private static final int TOOLTIP = 1;
private static final int BREITE = 2;
private static final int AUSRICHTUNG = 3;
private DefaultTableModel tableModel;
public String[][] tabdef;
public RTable(String[][] tabdef)
{
super();
tableModel = new DefaultTableModel() {
public boolean isCellEditable(int rowIndex, int mColIndex) {
return false;
}
};
this.setModel(tableModel);
setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION );
setCellSelectionEnabled(false);
setColumnSelectionAllowed( false );
setRowSelectionAllowed( true );
//und das im MouseListener, wo der Rechtsklick abgefangen wird...
//tabelle.setRowSelectionInterval(tabelle.rowAtPoint(e.getPoint()),tabelle.rowAtPoint(e.getPoint()));
//Spalten mit Überschriften hinzufügen
for (int i=0; i<tabdef.length; ++i) {
tableModel.addColumn(tabdef[i][TITEL]);
}
for (int i=0; i<tabdef.length; ++i) {
getColumnModel().getColumn(i).setPreferredWidth( Integer.parseInt(tabdef[i][BREITE]) );
}
JTableHeader header = getTableHeader();
header.setDefaultRenderer(new RHeaderCellRenderer());
}
// Eigener CellRenderer für die spaltenköpfe. Liefert imemr ein JLabel zurück, und implementiert TableCellRenderer
class RHeaderCellRenderer
extends JLabel
implements TableCellRenderer
{
// einzig wichtige methode
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
// text
setText(value.toString());
// normale schriftart
setFont(table.getFont());
// der standard rahmen für spaltenköpfe
setBorder(UIManager.getBorder("TableHeader.cellBorder"));
// text zentiriert darstellen
setHorizontalAlignment(SwingConstants.CENTER);
//setRowHeight(20);
//System.out.println(((RTable)table).tabdef[0][TITEL]);
//Tooltip
//setToolTipText(this.tabdef[column][TITEL]);
/*
if (tabdef[column][TOOLTIP].equals("")) {
setToolTipText(tabdef[column][TITEL]);
}
else {
setToolTipText(tabdef[column][TOOLTIP]);
}
*/
//Undurchsichtig damit man die hintergrundfarbe sieht.
setOpaque(true);
//Je nach spalte anpassen
switch(column) {
case 0: setBackground(Color.GREEN); break;
case 1:
setBackground(Color.BLUE);
setHorizontalAlignment(RIGHT);
break;
case 2: setBackground(Color.YELLOW); break;
case 3: setBackground(Color.RED); break;
default: setBackground(Color.LIGHT_GRAY);
}
return this;
}
}
}