2010-06-04 12 views
8

Ich versuche, zwei Tasten in einem Panel mit Swing-Widgets zu setzen. In der NetBeans-IDE ist meine JSeparatorborder-Eigenschaft im Eigenschaftsfenster auf (No border) eingestellt.Was ist der beste Weg, um Räume zwischen Objekten zu platzieren? Kann ein Swing JSeparator-Objekt ein unsichtbares Trennzeichen sein?

Trotzdem erscheint eine Zeile. Dies ist nicht, was ich von einem Trennobjekt erwarten würde. Mache ich etwas falsch? Ich komme aus einem Hintergrund in Delphi und C# WinForms und erwarte einige Besonderheiten in Swing. Aber wie genau machen Sie eine transparente Lücke einer bestimmten Größe zwischen zwei Schaltflächen in einem Panel? Muss ich mit Layouts spielen und die JSeparator vermeiden?

Aktualisierung: Es sollte trivial sein, dies mit einem Layout und ohne irgendein Trennzeichenobjekt zu tun. Also, wie machst du das? Ich untersuche den NetBeans-Layout-Customizer und den Eigenschaften-Inspektor und finde keine Möglichkeit, dies zu tun. (Antwort: Layouts mit Einsätzen anstelle von Trennzeichen.)

+0

Is „(keine Grenze)“ null oder ein Objekt eine leere Grenze darstellt? "Null" ist der UI-Standardrahmen –

+0

Übrigens, wenn Sie jemals wirklich dies tun wollten, müssten Sie den Look-and-Feel-Code des JSeparators überschreiben, um nichts zu malen. Die Linien sind nicht die Grenze. – justkt

+1

JSeperator wurde erfunden, um sichtbare Trennzeichen zu erzeugen. Sie wollen keinen Separator - Sie wollen eine Separation *, die mit einer der vielen Methoden erreichbar ist. –

Antwort

18

Sie sollten sich die statischen Hilfsmethoden der Klasse Box ansehen. Sie können verwendet werden, um feste Streben herzustellen, die als unsichtbare Separatoren wirken; z.B.

JPanel pnl = new JPanel(new FlowLayout()); 
pnl.add(new JButton("Hello")); 
pnl.add(Box.createHorizontalStrut(10)); // Fixed width invisible separator. 
pnl.add(new JButton("Goodbye"); 

Dies erzeugt kompakteren Code als das Erstellen/Konfigurieren eines JPanel, sich mit entsprechenden Minimal-, Maximal- und bevorzugten Dimensionen.

+0

Ich denke, dass dieser Code und der JPanel beide mehr Schmerzen auf lange Sicht sein können, als eine Standardpraxis, als die angemessene Verwendung von Layouts. –

+2

@Warren P : Je nach verwendetem Layout-Manager könnte dieser Code * eine angemessene Verwendung von Layouts * sein. Verschiedene Layout-Manager haben sehr unterschiedliche Wege, um das gleiche Ergebnis zu erzielen. –

+0

"Eine angemessene Verwendung von Layouts" bedeutet in meinem Fall "netbeans verwenden Layout-Manager, anstatt meinen eigenen Code zu generieren, während ich noch Netbeans lerne, swing und mein altes Java-Wissen auffrische ";-) –

4

JSeparator ist ein sichtbarer Trenner zwischen den Komponenten.

Vom javadoc for JSeparator:

JSeparator bietet eine allgemeine Zweck Komponententrennlinien für die Umsetzung - am häufigsten als Teiler zwischen den Menüpunkten verwendet, die sie bis in logische Gruppen unterbrechen.

Wenn Sie eine Komponente zwischen zwei Komponenten einfügen möchten, die unsichtbar ist, verwenden Sie stattdessen eine JPanel. Stellen Sie dann die Größe des Panels mit setPreferedSize() und setMin/MaxSize() ein.

+0

In den meisten Umgebungen außer Java wurde die Option, diese Zeile zu entfernen, berücksichtigt. Seltsam, dass es von diesen Jungs nicht berücksichtigt wurde. –

+1

Im Gegensatz dazu werden leere 'Box'-Elemente und' Insets' für genau diesen Zweck erstellt. Es wurde erwogen, einfach 'JSeparator' nicht zu verwenden – justkt

+0

Ah ja. Einfügungen sind perfekt für meine Zwecke und Box und createHorizontalStrut würde für wahrscheinlich jede andere Anwendung ausreichen. Jetzt bin ich erleuchtet. Vielen Dank. –

2

Sie benötigen keinen JSeparator. In den meisten Layouts können Sie Abstände zwischen den Komponenten festlegen. Und die Box-Klasse kann besonders nützlich sein.

+0

Wie kann ich ein Box-Layout mit zwei Tasten mit mindestens 10 Pixel zwischen den einzelnen Tasten haben? Ich kann das nicht verstehen. –

+1

'Box.createHorizontalStrut (10) 'zwischen den Schaltflächen in einem' FlowLayout'. – justkt

+0

Kühl. Der andere hat das im Code erwähnt, aber ich habe versucht, dies von der IDE (Netbeans) zu tun. Stellt sich heraus, dass Sie dies visuell im Layout-Manager tun können, indem Sie "Einfügungen" anpassen. –

1

Mit AddSeparator mit einem Wert von 1 für Höhe macht es für mich unsichtbar, zum Beispiel:

MyJToolBar.addSeparator(new Dimension(20, 1));