# JTable - Breite der Linien



## steve (2. Jan 2007)

Hallo,

Ich sitze immer noch an meinem Sudoku-Spiel. Deßhalb wollte ich fragen, ob es eine Möglichkeit gibt die Breite bestimmter Linien im JTable zu verändern. Es soll eben so aussehen wie ein Sudokufeld:






Gruß 
steve


----------



## André Uhres (3. Jan 2007)

Einfacher geht's über die Hintergrundfarbe: http://www.java-forum.org/de/viewtopic.php?p=230233#230233


----------



## steve (3. Jan 2007)

Stimmt, da habe ich auch schon dran gedacht. Nur sollte es so aussehen, wie man es aus Zeitschriften und dergleichen kennt.

Könnte man das evtl. mit mehreren Border Objekten machen?


----------



## m@nu (3. Jan 2007)

dein cellrenderer bekommt ja die information, für welche zelle er rendern soll. somit kannst du auch bestimmen, wo was für eine linie gezeichnet wird.
oder möchtest du so viel wie möglich mit den "default"-renderer, -editoren usw. machen?


----------



## steve (3. Jan 2007)

Bis jetzt habe ich das über den DefaultTableCellRenderer gemacht, bin jetzt aber auf 

```
JLabel implements TableCellRenderer
```
umgestiegen.

Jetzt kann ich den Rahmen für jede Zelle spezifisch setzen, aber wie bekomme ich Rahmen, die beispielsweise nur an einer Seite eine dickere Linie haben?


----------



## m@nu (3. Jan 2007)

getTableCellRendererComponent(..) liefert dir in den parametern row und col die position der zelle, welche gerendert werden soll. speicher dir diese werte intern in deinem renderer.

jetzt überschreibst/erweiterst du die paintComponent-methode deines renderers so, dass er entsprechend auf die abgelegten werte die linien zeichnet.

bin schon halb' auf'm heimweg, aber falls dir unklar sein sollte, was ich meine, schreib' ich dir gerne ein snippet (zuhause oder morgen im büro  )


----------



## André Uhres (3. Jan 2007)

Du brauchst eigentlich nur "paintComponent" von "JTable" zu überschreiben:

```
sudokuTable = new JTable(){
            public void paintComponent(Graphics g) {
                super.paintComponent(g);
                Graphics2D g2 = (Graphics2D)g;
                Rectangle rect = getCellRect(0, 0, true);
                g2.setStroke(new BasicStroke(2f));
                int y = (int)rect.getHeight()*3;
                int x = (int)rect.getWidth()*3+1;
                g2.drawLine(0, y, getSize().width, y);
                g2.drawLine(x, 0, x, getSize().height);
                y = (int)rect.getHeight()*6;
                x = (int)rect.getWidth()*6+2;
                g2.drawLine(0, y, getSize().width, y);
                g2.drawLine(x, 0, x, getSize().height);
            }
        };
```


----------



## steve (3. Jan 2007)

Super, es funktioniert !

Ich habe auch ausprobiert die Methode im Renderer zu überschreiben und es hat auch geklappt. Nur war diese Methode etwas aufwendiger. 

Vielen Dank an euch beide.


----------



## m@nu (3. Jan 2007)

naja, wenn man den wald vor lauter bäumen nicht mehr sieht... 
klar, so gehts natürlich n'stückchen einfacher gg


----------

