Hallo,
also ich blicke bei der repaintfunktion noch nicht so ganz durch.
Folgendes Problem:
ich habe eine JTable mit eigenem Cellrenderer und HeaderRenderer die bei jeder dritten Spalte eine BorderLinie zeichnet.
Wenn ich dann scrolle, wird der Header nicht korrekt dargestellt. Wo das repaint korrekt zu setzen ist oder irgendwelche besseren Methoden zur korrekten Darstellung entziehen sich leider meiner Kenntnis.
Hier ein Beispiel:

und hier Die Renderer:
Hier die Übergabe der Renderer:
also ich blicke bei der repaintfunktion noch nicht so ganz durch.
Folgendes Problem:
ich habe eine JTable mit eigenem Cellrenderer und HeaderRenderer die bei jeder dritten Spalte eine BorderLinie zeichnet.
Wenn ich dann scrolle, wird der Header nicht korrekt dargestellt. Wo das repaint korrekt zu setzen ist oder irgendwelche besseren Methoden zur korrekten Darstellung entziehen sich leider meiner Kenntnis.
Hier ein Beispiel:

und hier Die Renderer:
Code:
class MultiLineHeaderRenderer extends JLabel implements TableCellRenderer
{
private static final long serialVersionUID = 1L;
public MultiLineHeaderRenderer()
{
setOpaque(true);
setForeground(UIManager.getColor("TableHeader.foreground"));
setBackground(UIManager.getColor("TableHeader.background"));
setBorder(null);
setVerticalAlignment(CENTER);
setHorizontalAlignment(CENTER);
setVerticalTextPosition(CENTER);
setHorizontalTextPosition(CENTER);
setFont(new Font("Arial",1,12));
}
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column)
{
table.getTableHeader().setPreferredSize(new Dimension(0,30));
setBorder(new MatteBorder(0,1,0,0,Color.BLACK));
setText(value.toString());
repaint();
return this ;
}
}
Code:
class noLineHeaderRenderer extends JLabel implements TableCellRenderer {
private static final long serialVersionUID = 1L;
public noLineHeaderRenderer()
{
setOpaque(true);
setForeground(UIManager.getColor("TableHeader.foreground"));
setBackground(UIManager.getColor("TableHeader.background"));
setBorder(null);
setVerticalAlignment(CENTER);
setHorizontalAlignment(CENTER);
setVerticalTextPosition(CENTER);
setHorizontalTextPosition(CENTER);
setFont(new Font("Arial",1,12));
}
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column)
{
table.getTableHeader().setPreferredSize(new Dimension(0,30));
setBorder(new MatteBorder(0,0,0,0,Color.BLACK));
setText(value.toString());
repaint();
return this ;
}
}
Hier die Übergabe der Renderer:
Code:
MultiLineHeaderRenderer lineRenderer = new MultiLineHeaderRenderer();
noLineHeaderRenderer noLineRenderer = new noLineHeaderRenderer();
for (int i=0;i<jTable.getColumnCount();i++)
{
packColumn(umlaufPlan_jTable,i,5);
if(i%3==0)
{
TableColumn col = jTable.getColumnModel().getColumn(i);
col.setHeaderRenderer(lineRenderer);
}
else
{
TableColumn col = jTable.getColumnModel().getColumn(i);
col.setHeaderRenderer(noLineRenderer);
}
}