Frage

Ich schreibe eine benutzerdefinierte Datei-Auswahl-Komponente. In meinem UI zuerst klickt der Benutzer auf eine Schaltfläche, die eine JFileChooser erscheint; wenn es geschlossen ist, wird der absolute Pfad der ausgewählten Datei zu einem JTextField geschrieben.

Das Problem ist, absolute Pfade sind in der Regel lang, die das Textfeld führen zu vergrößern, seinen Behälter zu breit zu machen.

Ich habe dies versucht, aber es hat nichts tun, ist das Textfeld noch zu breit:

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

Zur Zeit, wenn er leer ist, ist es schon lange 400px, wegen GridBagConstraints attached to it.

Ich mag es wie Textfelder in HTML-Seiten sein, die eine feste Größe haben und nicht vergrößern, wenn der Eingang zu lang ist.

Also, wie kann ich die maximale Größe für eine JTextField eingestellt?

War es hilfreich?

Lösung

Es kann auf dem Layout-Manager hängen Ihr Textfeld in ist. Einige Layout-Manager erweitern und einige nicht. Einige erweitern nur in einigen Fällen andere immer.

Ich gehe davon aus Sie tun

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

Wenn ja, für die meisten vernünftigen Layouts, sollte das Feld nicht Größe ändern (zumindest sollte es wachsen nicht). Oft verhalten sich Layout-Manager schlecht, wenn sie in JScrollPanes setzen.

Nach meiner Erfahrung versuchen, die Größen über setMaximumSize und setPreferredWidth zu kontrollieren und ist so auf prekäre am besten. Swing entschieden auf seinem eigenen mit dem Layout-Manager und es gibt wenig, was Sie dagegen tun können.

Alles gesagt, ich habe nicht das Problem, die Sie erleben, die mir, dass einige vernünftige Nutzung eines Layout-Manager führt zu glauben, wird das Problem lösen.

Andere Tipps

Ich löse dies durch die maximale Breite an dem Behälter des Textfeldes einstellen, mit setMaximumSize.

Nach davetron Antwort, das ist eine fragile Lösung, da das Layout Manager diese Eigenschaft außer Acht lassen könnte. In meinem Fall ist der Behälter des oberste und in einem ersten Test es funktionierte.

Sie nicht der Größen auf das Textfeld ein. Stattdessen setzte die Spaltengröße auf einen Wert ungleich Null über setColumns oder mit dem Konstruktor mit der Spalte Argumente.

Was passiert ist, dass die bevorzugte Größe des JTextComponent gemeldet, wenn Spalten Null ist die gesamte Menge an Speicherplatz ist erforderlich, um den Text zu machen. Wenn Spalten auf einen Wert ungleich Null gesetzt ist die bevorzugte Größe ist die benötigte Größe, dass viele Standard-Spaltenbreiten zu zeigen. (Für einen Verstellpropeller Schrift ist es in der Regel nahe der Größe des unteren Gehäuses ‚m‘). Mit Spalten setzen das Textfeld auf Null wird so viel Platz anfordert, wie sie und streckte den ganzen Behälter erhalten.

Da Sie bereits in einem GridBagLayout mit einer Füllung haben, könnten Sie wahrscheinlich setzen nur die Spalten 1 und lassen Sie die Füllung strecken sie basierend auf den anderen Komponenten, oder eine andere geeignete niedrige Zahl.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top