Hallo,
ich möchte in einem JTableHeader per paintComponent zeichnen. Diese Zeichnung soll beim Scrollen der Tabelle nach links/rechts mitbewegt werden - also immer über den gleichen Spalten stehen. Da sich die Zeichnung über mehrere Spalten erstreckt, kann ich imo nicht über den CellRenderer gehen.
Ich habe es so versucht:
Dies ist mein Tableheader:
Von der ursprünglichen Tabelle setze ich dann den neuen Header mittels
und adde sie zu einer Scrollpane.
Die Zeichnung wird zwar richtig mitgescrollt, allerdings wird der ursprüngliche Tableheader (der ja in meinem neuen enthalten ist) nicht richtig dargestellt, wenn ich nach rechts scrolle - es entstehen Artefakte (siehe Anhang).
Hat jemand eine Idee, wie ich dieses Problem beheben könnte? Oder gibt es evtl eine andere Möglichkeit als einen eigenen Header zu schreiben?
Meine Variante hat nämlich noch den Nachteil, dass ich die Spalten nicht resizen kann.
ich möchte in einem JTableHeader per paintComponent zeichnen. Diese Zeichnung soll beim Scrollen der Tabelle nach links/rechts mitbewegt werden - also immer über den gleichen Spalten stehen. Da sich die Zeichnung über mehrere Spalten erstreckt, kann ich imo nicht über den CellRenderer gehen.
Ich habe es so versucht:
Dies ist mein Tableheader:
Code:
public class MyTableHeader extends JTableHeader {
JTableHeader defaultHeader;
public MyTableHeader(JTableHeader defaultHeader) {
super();
this.defaultHeader = defaultHeader;
setPreferredSize(new Dimension(defaultHeader.getWidth(),50));
GroupLayout gl = new GroupLayout(this);
this.setLayout(gl);
gl.setHorizontalGroup(gl.createSequentialGroup()
.addComponent(defaultHeader));
gl.setVerticalGroup(gl.createSequentialGroup()
.addGap(0,0,Integer.MAX_VALUE)
.addComponent(defaultHeader));
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
//beispielhafte Zeichnung
g.fillRect(20, 20, this.getWidth(), 5);
}
}
Von der ursprünglichen Tabelle setze ich dann den neuen Header mittels
Code:
table.setTableHeader(new MyTableHeader(table.getTableHeader()));
und adde sie zu einer Scrollpane.
Die Zeichnung wird zwar richtig mitgescrollt, allerdings wird der ursprüngliche Tableheader (der ja in meinem neuen enthalten ist) nicht richtig dargestellt, wenn ich nach rechts scrolle - es entstehen Artefakte (siehe Anhang).
Hat jemand eine Idee, wie ich dieses Problem beheben könnte? Oder gibt es evtl eine andere Möglichkeit als einen eigenen Header zu schreiben?
Meine Variante hat nämlich noch den Nachteil, dass ich die Spalten nicht resizen kann.