2010-06-04 16 views
8

Sto provando a inserire due pulsanti in un pannello utilizzando i widget Swing. All'interno dell'IDE NetBeans, la mia proprietà è impostata su (No border) nel riquadro delle proprietà.Qual è il modo migliore per inserire spazi tra gli oggetti? Un oggetto JSeparator di Swing può essere un separatore invisibile?

Tuttavia viene visualizzata una linea. Questo non è quello che mi aspetterei da un oggetto separatore. Sto facendo qualcosa di sbagliato? Provenendo da uno sfondo in Delphi e C# WinForms, mi aspetto di trovare alcune stranezze in Swing. Ma in che misura realizzi uno spazio trasparente di una dimensione particolare, tra due pulsanti in un pannello? Devo giocare con i layout ed evitare lo JSeparator?

Aggiornamento: Dovrebbe essere banale farlo con un layout e senza alcun oggetto separatore. Quindi come lo fai? Sto esaminando il customizer del layout e l'ispettore delle proprietà di NetBeans e non trovo alcun modo per farlo. (Risposta: Layout con riquadri, anziché separatori.)

+0

Is "(nessun bordo)" null o un oggetto che rappresenta un confine vuoto? 'null' è il confine di default dell'interfaccia utente –

+0

A proposito, se hai mai voluto davvero farlo devi sovrascrivere il codice look and feel di JSeparator per non dipingere nulla. Le linee non sono il confine. – justkt

+1

JSeperator è stato inventato per creare separatori visibili. Non vuoi un separatore - vuoi una separazione *, che è ottenibile con uno dei tanti metodi seguenti. –

risposta

18

Si dovrebbe dare un'occhiata ai metodi di utilità statici sulla classe Box. Possono essere utilizzati per fabbricare puntoni fissi che fungono da separatori invisibili; per esempio.

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"); 

Questo produce più codice compatto che creare/configurazione di una JPanel soli con minimo appropriato, massimo e dimensioni preferite.

+0

Penso che questo codice e il JPanel potrebbero essere entrambi più dolorosi a lungo termine, come pratica standard, rispetto all'utilizzo appropriato dei layout. –

+2

@Warren P : A seconda del gestore di layout che si utilizza, questo codice potrebbe * essere * un uso appropriato dei layout.I diversi gestori di layout hanno modi molto diversi per ottenere lo stesso risultato. –

+0

"Uso appropriato dei layout" nel mio caso, significa "usa i netbeans" gestore di layout invece di generare il mio codice, mentre sto ancora imparando netbeans, swing e rispolverare la mia conoscenza del linguaggio java stantio. ;-) –

4

JSeparator è pensato per essere un separatore visibile tra i componenti.

Dal javadoc for JSeparator:

JSeparator fornisce un componente generale scopo per attuare linee divisorie - più comunemente usato come divisorio tra gli elementi di menu che li suddivide in raggruppamenti logici.

Se si desidera inserire un componente tra due componenti invisibile, utilizzare invece JPanel. Quindi imposta la dimensione del pannello con setPreferedSize() e setMin/MaxSize().

+0

Nella maggior parte degli ambienti diversi da java, sarebbe stata considerata l'opzione di disattivarla. Strano che non fosse considerato da questi ragazzi. –

+1

Al contrario, gli oggetti 'Box' vuoti e' Insets' sono creati proprio per questo scopo. È stato considerato, semplicemente non usando 'JSeparator' – justkt

+0

Ah sì. Gli inserimenti sono perfetti per i miei usi, e box e createHorizontalStrut sarebbero sufficienti per qualsiasi altra applicazione. Ora sono illuminato. Grazie. –

2

Non è necessario JSeparator. La maggior parte dei layout ti consente di impostare lo spazio (spazio) tra i componenti. E la classe Box può essere particolarmente utile.

+0

Come posso avere un layout di scatola con due pulsanti in esso con almeno 10 pixel tra ogni pulsante? Non riesco a capirlo. –

+1

'Scatola.createHorizontalStrut (10) 'tra i pulsanti, in un' FlowLayout'. – justkt

+0

Fresco. L'altro ragazzo ha menzionato questo, nel codice, ma stavo cercando di farlo dall'IDE (netbeans). Risulta che è possibile farlo visivamente nel gestore del layout regolando "insets". –

1

Usando Aggiungi separatore con un valore pari a 1 per l'altezza rende invisibile per me, per esempio:

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