# Etched Border nur an einer Seite einfügen



## Gast2 (5. Jul 2011)

Hallo, ich grübele schon den ganzen Vormittag über folgendes Problem: 

Ich möchte meiner ToolBar einen Border an der Unterseite verpassen. 

Da ich keine einfache Trennlinie will fällt der MatteBorder schonmal weg. EchtedBorder ect kann man aber nicht Seiten Selektiv konfigurieren. 

Nun meine Frage: Wie mache ich das? 

Das einzige was mir noch einfiel, war ein JPanel zu verwenden und darin dann noch einen Separator einzubauen. Aber auch der lässt sich in Optik ja nicht groß verändern. 

Ziel wäre es also einen Border nur an einer Seite festzulegen. (Die ToolBar soll am Ende ähnlich der NetBeans Umgebung aussehen). 

Ich hoffe jemand hat darauf eine Antwort, Google und Forumsuche waren nicht ergiebig. Und auch das Sun Tutorial "How to use Borders" war nicht hilfreich in diesem Fall.

Gruß Florian


----------



## TR (5. Jul 2011)

```
BorderFactory.createEmptyBorder(0,0,20,0);
```


----------



## Gast2 (5. Jul 2011)

TR hat gesagt.:


> ```
> BorderFactory.createEmptyBorder(0,0,20,0);
> ```



Das wäre ja nur ein leerer Border. 

Gefragt war ja ein Bevel oder Etched Border an nur einer Seite.


----------



## TR (5. Jul 2011)

edit:
hast du dir die Beispiele schon angeguckt?
How to Use Borders (The Java™ Tutorials > Creating a GUI With JFC/Swing > Using Swing Components)


----------



## Gast2 (5. Jul 2011)

Das nützt ja nichts, denn der Inside oder Outside Border wäre immer noch ein Bevel oder Etched Border und dieser kann nicht nur für eine Seite angegeben werden.


----------



## Dit_ (5. Jul 2011)

hmm sowei ich weiss hat JToolBar per default sowas. Bist du sicher dass dein ToolBar in voller Höhe dargestellt wird?

Was für LaF verwendest du?


----------



## Gast2 (5. Jul 2011)

Verwende das native Laf. 

Ich hänge einfach mal ein Beispiel an:

beispiel _meins so siehts aus. Ohne irgend eine Abgrenzungslinie unten. Möchte ich einen Bevel oder Etched Border gehts nur komplett drum herum. Also auch zwischen Menü und Toolbar wo ja nicht noch was sein soll. 

beispiel_netbeans: Eingekringelt das was ich gerne hätte. Dort sieht man eine Bevel Line unter der Toolbar. Und zwar NUR unter der Toolbar. Keine Ahnung wie man das macht.


----------



## TR (5. Jul 2011)

vielleicht so?

```
BorderFactory.createCompoundBorder(BorderFactory.createEmptyBorder(-2,-2,0,-2),BorderFactory.createBevelBorder(BevelBorder.RAISED))
```

oder überschreiben?

```
BevelBorder border = new BevelBorder(BevelBorder.RAISED){
	@Override
	protected void paintRaisedBevel(Component c, Graphics g, int x,
			int y, int width, int height) {
        Color oldColor = g.getColor();
        int h = height;
        int w = width;
        g.translate(x, y);
        g.setColor(getShadowOuterColor(c));
        g.drawLine(0, h-1, w-1, h-1);
        g.setColor(getShadowInnerColor(c));
        g.drawLine(1, h-2, w-2, h-2);
        g.translate(-x, -y);
        g.setColor(oldColor);
	}
};
```


----------



## Gast2 (5. Jul 2011)

TR hat gesagt.:


> vielleicht so?
> 
> ```
> BorderFactory.createCompoundBorder(BorderFactory.createEmptyBorder(-2,-2,0,-2),BorderFactory.createBevelBorder(BevelBorder.RAISED))
> ...



Überschreiben geht grundsätzlich. Könnte man natürlich auch die Insets ändern sodass der eigene Border Typ eben nur an einer Seite einen Border zeichnet. Dachte nur es gibt vielleicht eine API Möglichkeit ohne was eigenes zu schreiben. 

Zu dem Überschreiben hab ich auch noch nen anderen Thread im Forum gefunden: http://www.java-forum.org/503429-post3.html

Aber zur Version 1 mit dem MatteBorder und dre Angabe von -2: Ist das Laf unabhängig?


----------



## Dit_ (5. Jul 2011)

na gut ich würde dann wirklich einfach JSeparator drunter platzieren. Ich meine, "JSeparator" heiß ja nicht umsonst so


----------



## Gast2 (5. Jul 2011)

Dit_ hat gesagt.:


> na gut ich würde dann wirklich einfach JSeparator drunter platzieren. Ich meine, "JSeparator" heiß ja nicht umsonst so



Klar aber ich würd trotzdem gerne Wissen, wie das bei NetBeans gemacht ist. Das ist definitiv kein Separator und auch kein Border der drum rum gezeichnet ist.

Nennt es akademische Neugier. Ich komm halt einfach nicht drauf. (Außer die haben eigene Border geschrieben).


----------



## Dit_ (5. Jul 2011)

die haben eigenes LookAndFeel wahrscheinlich.

Ich glaube in Netbeans kann man LookAndFeels ändern. probiere mal damit. wie gesagt bei mir, wenn ich DefaultJava-LaF oder MetallLaF verwende, habe ich unter dem ToolBar IMMER eine Trennlinie.


----------



## Dit_ (5. Jul 2011)

axo mom, du könntest doch einfach der Komponente die unter ToolBar liegt, JPanel zb, einen Border geben dann hast du genau das, was dir fehlt. :toll:


----------



## Gast2 (5. Jul 2011)

Ja nee wäre ja auch wieder das Problem, dass es dann nur oben sein sollte. Zumal ich unten ein Composite habe. 

Stimmt im Java Laf ist da eine Trennlinie. Das Toolbar hat auch einen Border. Unter Windows Laf wird der nur nicht gezeichnet. Unter dem Java Laf sieht man, dass er verschnidet wenn man den Border null setzt. Bei Windows sieht man ihn nur nie. Der ist auch nur unten. Das versteh mal einer wieso man den unter Windoof Laf nicht sieht.

*Zurück zu meiner Frage einige Posts zuvor. Die Lösung mit dem -2 im MatteBorder... Das ist dann nicht unabhängig vom Laf oder doch?*


----------



## TR (5. Jul 2011)

da ja die 2 Pixel 2 Linien überdecken sollen, die im BevelBorder gezeichnet werden, die also nicht vom L&F gesteuert werden, wäre es L&F unabhängig!


----------



## Gast2 (5. Jul 2011)

TR hat gesagt.:


> da ja die 2 Pixel 2 Linien überdecken sollen, die im BevelBorder gezeichnet werden, die also nicht vom L&F gesteuert werden, wäre es L&F unabhängig!



Danke, wusste eben nicht, dass die 2 Pixel Laf unabhängig gezeichnet werden. Die Farben sind ja mit Sicherheit Laf abhängig. 

Das ist dann die praktikabelere Lösung. Werde mich aber wohl doch mal mit dem schreiben eines eigenen BorderFactory beschäftigen allein um es besser zu verstehen. 

In NetBeans scheint dann auch eine veränderte Variante eines Bevel Border eingesetzt zu werden. 

Jeder dem noch was einfällt einfach mal hier rein posten. Lasse den Thread noch etwas offen.


----------



## TR (5. Jul 2011)

die Farben sind nur teils L&F abhängig,
er holt sich die akt. Farbe und macht sie dunkler!

```
getBackground().darker().darker()
```


----------

