Hallo,
ich habe versucht links neben dem JTable noch ein Row Header zu erstellen, was auch funktioniert hat.
Leider gibt es Probleme mit der Darstellen der Row Header, die nicht so aussehen wie die JTable Header.
Wie könnte man das ändern, so das es für jedes Look and Feel geht?
Grüße
ich habe versucht links neben dem JTable noch ein Row Header zu erstellen, was auch funktioniert hat.
Leider gibt es Probleme mit der Darstellen der Row Header, die nicht so aussehen wie die JTable Header.
Wie könnte man das ändern, so das es für jedes Look and Feel geht?
Grüße
Java:
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.EventQueue;
import javax.swing.AbstractListModel;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ListCellRenderer;
import javax.swing.ListModel;
import javax.swing.UIManager;
import javax.swing.border.EmptyBorder;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.JTableHeader;
public class TestRowHeader extends JFrame {
private static final long serialVersionUID = 1L;
private JPanel contentPane;
private JTable table;
public TestRowHeader() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(new BorderLayout(0, 0));
setContentPane(contentPane);
JScrollPane scrollPane = new JScrollPane();
table = new JTable();
table.setModel(new DefaultTableModel(
new Object[][] { { "1", "3", "0" }, { "50", "51", "42" },
{ "42", "4", null }, },
new String[] { "X1", "X2", "X3" }));
JList l = new JList(getRowListModel());
l.setFixedCellWidth(100);
l.setFixedCellHeight(table.getRowHeight() + table.getRowMargin());
l.setCellRenderer(new TestRowHeaderRenderer(table));
scrollPane.setRowHeaderView(l);
scrollPane.setViewportView(table);
contentPane.add(scrollPane, BorderLayout.CENTER);
}
public static void main(String[] args) {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Throwable e) {
e.printStackTrace();
}
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
TestRowHeader frame = new TestRowHeader();
frame.setSize(500, 125);
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public ListModel getRowListModel() {
ListModel lm = new AbstractListModel() {
private static final long serialVersionUID = 1L;
String header[] = { "A", "B", "C" };
@Override
public int getSize() {
return header.length;
}
@Override
public Object getElementAt(int index) {
return header[index];
}
};
return lm;
}
}
class TestRowHeaderRenderer extends JLabel implements ListCellRenderer {
private static final long serialVersionUID = 1L;
public TestRowHeaderRenderer(JTable table) {
super();
JTableHeader header = table.getTableHeader();
setOpaque(true);
setBorder(UIManager.getBorder("TableHeader.cellBorder"));
setHorizontalAlignment(CENTER);
setForeground(header.getForeground());
setBackground(header.getBackground());
setFont(header.getFont());
}
@Override
public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus) {
setText((value == null) ? "" : value.toString());
return this;
}
}