Tabellenspalten trennen

  • Themenstarter Themenstarter jensi
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
J

jensi

Gast
Ich hab eine Tabelle, deren Einträge aus zwei verschiedenen Tabellen kommen.
Nun will ich die Spalten der 1.Tabell von den Spalten der 2. Tabelle visioell trennen. Also einen etwas dickeren Strich zwischen den Spalten währe cool. geht sowas? und wie?
 
würde vieleicht gehen. kann ich irgendwie die breite der spalte statisch machen (unabhängig von einer verschiebung der spaltenbreite) und sehr klein festlegen? dann wirken die beiden randlinien als eine dickere.
 
und wie soll das gehen? ich kann doch mit border nur die umrandung einer ganzen tabelle beeinflussen!???
 
Du kannst die Zelle leer lassen und einen Renderer schreiben, der die Zelle einfach schwarz füllt.
Abgesehen davon gibt es natürlich auch die Methode JTable#setRowHeight.
 
Illuvatar hat gesagt.:
Du kannst die Zelle leer lassen und einen Renderer schreiben, der die Zelle einfach schwarz füllt.
Abgesehen davon gibt es natürlich auch die Methode JTable#setRowHeight.

Spalten sind aber senkrecht 😉
 
1. wenn ich die felder schwarz mache, wie mache ich sie statisch?
2. richtig. spalten sind senkrecht. hilft mir also auch nicht weiter.
 
wie wäre es, einen Renderer zu nehmen und den linken Rand von der ersten Spalte der zweiten Tabelle dicker zu zeichnen?
 
schon klar - aber du kannst doch dem Renderer sagen, dass er in Spalte x etwas anders macht als sonst, richtig? Dann brauchste nur noch die Spaltennummer, bei der der Inhalt von Tabelle 2 anfängt ...
 
jensi hat gesagt.:
und wie soll das gehen? ich kann doch mit border nur die umrandung einer ganzen tabelle beeinflussen!???
Hab den Post übersehen, also hier meine Antwort (dafür ausführlich):

Du brauchst einen Renderer, der pro Zelle den Border bestimmen kann; sieht ungefähr so aus:


Renderer:
Code:
class MyRenderer extends DefaultTableCellRenderer {
  public Component getTableCellRendererComponent( JTable table, Object value,
                                                  boolean isSelected,
                                                  boolean hasFocus, int row,
                                                  int column ) {
    super.getTableCellRendererComponent( table, value, isSelected, hasFocus,
                                         row, column );
    setBorder( new MyCellBorder( Color.green, 0, 0, 0, 5 ) ); // Grüner rechter Rand  ;-)
    return this;
  }
}



Border:
Code:
class MyCellBorder extends EmptyBorder {

  Color color;
  int top, left, bottom, right;

  public MyCellBorder( Color color, int top, int left, int bottom, int right ) {
    super( top, left, bottom, right );

    this.color = color;
    this.top = top;
    this.left = left;
    this.bottom = bottom;
    this.right = right;
  }

  public void paintBorder( Component c, Graphics g, int x, int y, int width,
                           int height ) {
    Color oldColor = g.getColor();
    g.setColor( color );

    g.fillRect( x, y, width, top );
    g.fillRect( x, y, left, height );
    g.fillRect( x, height - bottom, width, bottom );
    g.fillRect( width - right, y, right, height );

    g.setColor( oldColor );
  }

}

Renderer z.B. für Spalte '0' setzen:
Code:
table.getColumnModel().getColumn(0).setCellRenderer(new MyRenderer());
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben