Code
int size = 32;
JTable table = new JTable(model) {
@Override public void updateUI() {
super.updateUI();
setRowHeight(size);
TableCellRenderer hr = new VerticalTableHeaderRenderer();
TableColumnModel cm = getColumnModel();
cm.getColumn(0).setHeaderRenderer(
new DiagonallySplitHeaderRenderer());
cm.getColumn(0).setPreferredWidth(size * 5);
for (int i = 1; i < cm.getColumnCount(); i++) {
TableColumn tc = cm.getColumn(i);
tc.setHeaderRenderer(hr);
tc.setPreferredWidth(size);
}
}
};
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
JScrollPane scroll = new JScrollPane(table);
scroll.setColumnHeader(new JViewport() {
@Override public Dimension getPreferredSize() {
Dimension d = super.getPreferredSize();
d.height = size * 2;
return d;
}
});
// ...
class DiagonallySplitBorder extends MatteBorder {
protected DiagonallySplitBorder(
int top, int left, int bottom, int right, Color matteColor) {
super(top, left, bottom, right, matteColor);
}
@Override public void paintBorder(
Component c, Graphics g, int x, int y, int width, int height) {
super.paintBorder(c, g, x, y, width, height);
Graphics2D g2 = (Graphics2D) g.create();
g2.translate(x, y);
g2.setRenderingHint(
RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2.setPaint(getMatteColor());
g2.drawLine(0, 0, c.getWidth() - 1, c.getHeight() - 1);
g2.dispose();
}
}
References
No comments:
Post a Comment