Java, Swing: wie kann ich die maximale Breite von einem JTextField?
Schreibe ich eine benutzerdefinierte Datei-Auswahl-Komponente. In meiner UI, ist zunächst der Benutzer auf eine Schaltfläche klickt, woraufhin eine JFileChooser
; wenn es geschlossen ist, den absoluten Pfad der ausgewählten Datei wird geschrieben, um ein JTextField
.
Das problem ist, absolute Pfade sind in der Regel lang, die bewirkt, dass das Textfeld zu vergrößern, wodurch der container zu breit.
Ich hab das versucht, aber es hat nichts, das Textfeld ist immer noch zu breit:
fileNameTextField.setMaximumSize(new java.awt.Dimension(450, 2147483647));
Derzeit, wenn es leer ist, ist es schon 400px lang, weil der GridBagConstraints
attached to it.
Ich möchte es werden, wie text-Felder in HTML-Seiten, die eine Feste Größe haben und nicht zu vergrößern, wenn die Eingabe zu lang ist.
So, wie ich die max Größe für ein JTextField
?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es können abhängig von der layout-manager das Textfeld ist. Einige layout-Manager erweitern Sie und manche nicht. Einige erweitern nur in einigen Fällen, andere immer.
Ich nehme an, Sie tun
Wenn ja, für die meisten vernünftigen layouts, das Feld sollte nicht die Größe ändern (zumindest sollte es nicht wachsen). Oft layout-Manager Verhalten sich schlecht, wenn in
JScrollPane
s.Meiner Erfahrung nach, versuchen zu kontrollieren, die Größen über
setMaximumSize
undsetPreferredWidth
und so weiter sind prekär am besten. Swing auf eigene beschlossen mit dem layout-manager und es gibt wenig Sie dagegen tun können.Alles, was gesagt, ich habe nicht hatte das problem, das Sie erleben, die führt mich zu glauben, dass einige kluge Einsatz der layout-manager das problem zu lösen.
Ich löste dies durch die Festlegung der maximalen Breite des Containers der den text-Feld, mit
setMaximumSize
.Laut davetron Antwort, dies ist eine fragile Lösung, weil der layout-manager könnte ignorieren diese Eigenschaft. In meinem Fall, der container ist der oberste, und in einem ersten test funktionierte es.
Nicht alle Größen auf das Textfeld. Stattdessen legen Sie die Spalte Größe auf einen Wert ungleich null, der über setColumns oder verwenden Sie den Konstruktor mit dem argument Spalte.
Was passiert ist, dass die bevorzugte Größe berichtet von der JTextComponent, wenn die Spalten gleich null ist, ist die gesamte Menge an Speicherplatz benötigt, um den text gestalten. Wenn die Spalten auf einen Wert ungleich null, wird die bevorzugte Größe ist die benötigte Größe zu zeigen, dass viele standard-Spaltenbreiten. (für eine variable Zeichenbreite ist es in der Regel zu schließen, um die Größe des Kleinbuchstaben "m"). Mit Spalten auf null setzen des text-Feldes anfordert, so viel Platz, wie Sie bekommen können, und streckte den ganzen container.
Da Sie bereits haben es in ein GridBagLayout mit einem füllen, könnten Sie wahrscheinlich nur die Spalten 1 und lassen Sie die Füllung ziehen Sie es aus, basierend auf den anderen Komponenten, oder eine andere entsprechend geringer Anzahl.
FlowLayout
.