Domanda

Sto scrivendo un componente di selezione file personalizzato. Nella mia IU, prima l'utente fa clic su un pulsante, che fa apparire un JFileChooser ; quando è chiuso, il percorso assoluto del file selezionato viene scritto in un JTextField .

Il problema è che i percorsi assoluti sono generalmente lunghi, il che causa l'ampliamento del campo di testo, rendendo il suo contenitore troppo ampio.

Ho provato questo, ma non ha fatto nulla, il campo di testo è ancora troppo ampio:

fileNameTextField.setMaximumSize(new java.awt.Dimension(450, 2147483647));

Attualmente, quando è vuoto, è già lungo 400 px, a causa del GridBagConstraints collegato ad esso.

Vorrei che fosse come campi di testo nelle pagine HTML, che hanno una dimensione fissa e non si ingrandiscono quando l'input è troppo lungo.

Quindi, come posso impostare la dimensione massima per un JTextField ?

È stato utile?

Soluzione

Può dipendere dal gestore di layout in cui si trova il tuo campo di testo. Alcuni gestori di layout si espandono e altri no. Alcuni si espandono solo in alcuni casi, altri sempre.

Suppongo tu stia facendo

filedNameTextField = new JTextField(80); // 80 == columns

In tal caso, per i layout più ragionevoli, il campo non dovrebbe cambiare dimensione (almeno, non dovrebbe crescere). Spesso i gestori di layout si comportano male quando vengono inseriti in JScrollPane s.

Nella mia esperienza, provare a controllare le dimensioni tramite setMaximumSize e setPreferredWidth e così via sono alquanto precari. Swing ha deciso autonomamente con il layout manager e c'è poco che puoi fare al riguardo.

Detto questo, non ho avuto il problema che stai riscontrando, il che mi porta a credere che un uso giudizioso di un gestore di layout risolverà il problema.

Altri suggerimenti

Ho risolto questo problema impostando la larghezza massima sul contenitore del campo di testo, usando setMaximumSize .

Secondo la risposta di davetron, questa è una soluzione fragile, perché il gestore del layout potrebbe ignorare quella proprietà. Nel mio caso, il contenitore è il più alto e in un primo test ha funzionato.

Non impostare nessuna delle dimensioni nel campo di testo. Invece imposta la dimensione della colonna su un valore diverso da zero tramite setColumns o usando il costruttore con l'argomento della colonna.

Ciò che sta accadendo è che la dimensione preferita riportata da JTextComponent quando le colonne sono zero è l'intera quantità di spazio necessaria per eseguire il rendering del testo. Quando le colonne sono impostate su un valore diverso da zero, la dimensione preferita è la dimensione necessaria per mostrare che molte larghezze di colonna standard. (per un carattere a passo variabile di solito è vicino alla dimensione della 'm' minuscola). Con le colonne impostate su zero, il campo di testo richiede più spazio possibile e allunga l'intero contenitore.

Dato che lo hai già in un GridBagLayout con un riempimento, probabilmente potresti semplicemente impostare le colonne su 1 e lasciare che il riempimento si estenda in base agli altri componenti o ad un altro numero adeguatamente basso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top