2012-03-04 22 views
5

Sono abbastanza nuovo in Java e sto provando a creare un'applicazione GUI con alcune etichette, pulsanti e campi di testo. Il programma è piuttosto semplice e volevo solo usare un layout predefinito, che è FlowLayout. Sono riuscito a posizionare e ridimensionare tutto, ma l'unica cosa che sembra non funzionare è l'allineamento. Voglio posizionare pulsanti e campi di testo con determinati allineamenti, ma ogni volta che imposto un allineamento, sposta il testo all'interno di qualsiasi oggetto anziché nell'oggetto stesso. Per esempio, ho scritto:Java Swing FlowLayout Alignments

button.setHorizontalAlignment(JButton.RIGHT); 

ma sembra che allinea il testo all'interno del pulsante al posto del pulsante stesso. C'è un modo per allineare il pulsante stesso piuttosto che il testo al suo interno?

So che l'allineamento potrebbe essere più semplice con qualche altro tipo di layout (ad es. BoxLayout), ma voglio solo usare il FlowLayout per questo, a meno che non sia impossibile allinearli usando il FlowLayout (che non uso penso di sì).

Grazie in anticipo.

+2

+1 bella domanda, per Swing è meglio inviare domande con [SSCCE] (http://sscce.org/) – mKorbel

risposta

13

Vedere il costruttore FlowLayout(int align).

Costruisce un nuovo FlowLayout con la allineamento specificato e un predefinito 5 unità distanza orizzontale e verticale. Il valore dell'argomento di allineamento deve essere uno di FlowLayout.LEFT, FlowLayout.RIGHT, FlowLayout.CENTER, FlowLayout.LEADING o FlowLayout.TRAILING.

Sembra siete dopo una FlowLayout.RIGHT come si vede nella this answer (la combo e casella di controllo in alto).

+0

Sì, questo ha funzionato. Ovviamente ho bisogno di usare altri tipi di layout per ottenere un allineamento migliore, ma questo funziona piuttosto bene. Grazie. – Dennis

+1

Quindi sceglierei un layout annidato come sopra. Anche se l'unico allineamento in quanto oltre al layout del flusso è il centraggio dell'immagine nel 'GridBagLayout'. Quest'ultimo non è raggiunto nel costruttore, ma usando un vincolo di layout (o meglio, trascurandone uno) quando si aggiunge l'immagine. –

+0

@AndrewThompson: Quando scrivo questo 'JPanel plafComponents = new JPanel (nuovo FlowLayout (FlowLayout.RIGHT, 3,3));', mi dà un errore dicendo che non riesco a trovare il simbolo, VARIABILE A destra o qualunque cosa io usi. C'è qualcosa di sbagliato nel mio JDK? Posso comunque usare il normale costruttore di FlowLayout. Spero che tu possa darmi dei consigli su cosa c'è che non va nella mia parte? o devo iniziare una nuova discussione per questo? –

2

setHorizontalAlignment del AbstractButton imposta l'allineamento orizzontale del dell'icona e testo non la posizione del pulsante. L'impostazione predefinita di AbstractButton è SwingConstants.CENTER.

Se si vuole allineare la button..set la posizione, mentre l'aggiunta al pannello o frame..something come questo ....

p.add(button, BorderLayout.SOUTH);//using `BorderLayout` 

layout di flusso sono tipicamente utilizzati per i pulsanti in un organizzare pannello. Sistemerà i pulsanti da sinistra a destra fino a quando non saranno più inseriti i pulsanti sulla stessa riga.

+0

Non credo che questo lavoro .. Ho provato, ma non cambia nulla. Dice che il secondo parametro è per la posizione, ma non cambia nulla per qualche motivo. – Dennis

2

Non penso che si possa fare questo con un FlowLayout da solo.

mio suggerimento sarebbe:

  • considerazione il passaggio a MigLayout che è un meccanismo di layout molto più potente. MigLayout consente fondamentalmente di posizionare i componenti all'interno di una griglia flessibile e di impostare l'allineamento specifico di un componente all'interno di ciascuna cella della griglia.
  • Quando si desidera allineare i sottocomponenti, spesso ha anche senso inserirli in uno JPanel nidificato. Puoi quindi utilizzare un layout separato per questo JPanel (BorderLayout forse?) Che ti consentirà di ottenere l'allineamento esatto che desideri.