Etched Border nur an einer Seite einfügen

  • Themenstarter Themenstarter Gast2
  • Beginndatum Beginndatum
G

Gast2

Gast
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
 
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.
 
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?
 
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.
 

Anhänge

  • beispiel_meins.jpg
    beispiel_meins.jpg
    12,7 KB · Aufrufe: 37
  • beispiel_netbeans.jpg
    beispiel_netbeans.jpg
    21,3 KB · Aufrufe: 47
vielleicht so?
Java:
BorderFactory.createCompoundBorder(BorderFactory.createEmptyBorder(-2,-2,0,-2),BorderFactory.createBevelBorder(BevelBorder.RAISED))

oder überschreiben?
Java:
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);
	}
};
 
vielleicht so?
Java:
BorderFactory.createCompoundBorder(BorderFactory.createEmptyBorder(-2,-2,0,-2),BorderFactory.createBevelBorder(BevelBorder.RAISED))

oder überschreiben?
Java:
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);
	}
};

Ü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?
 
na gut ich würde dann wirklich einfach JSeparator drunter platzieren. Ich meine, "JSeparator" heiß ja nicht umsonst so 🙂
 
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).
 
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.
 
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:
 
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?
 
Zuletzt bearbeitet von einem Moderator:
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!
 
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.
 
die Farben sind nur teils L&F abhängig,
er holt sich die akt. Farbe und macht sie dunkler!
Java:
getBackground().darker().darker()
 

Neue Themen


Zurück
Oben