Java, Swing: Wie stelle ich die maximale Breite eines JTextFields ein?

8

Ich schreibe eine benutzerdefinierte Dateiauswahlkomponente. In meiner Benutzeroberfläche klickt der Benutzer zunächst auf eine Schaltfläche, die ein JFileChooser ; Wenn es geschlossen ist, wird der absolute Pfad der ausgewählten Datei in ein JTextField geschrieben.

Das Problem ist, dass absolute Pfade normalerweise lang sind, was dazu führt, dass sich das Textfeld vergrößert und der Container zu breit wird.

Ich habe das versucht, aber es hat nichts gemacht, das Textfeld ist immer noch zu breit:

%Vor%

Derzeit, wenn es leer ist, ist es bereits 400px lang, weil GridBagConstraints daran angehängt ist.

Ich möchte, dass es wie Textfelder in HTML-Seiten aussieht, die eine feste Größe haben und nicht vergrößern, wenn die Eingabe zu lang ist.

Also, wie setze ich die maximale Größe für ein JTextField ?

    
Leonel 24.09.2008, 15:55
quelle

3 Antworten

12

Es kann vom Layout-Manager abhängen, in dem sich Ihr Textfeld befindet. Einige Layout-Manager werden erweitert, andere nicht. Manche erweitern sich nur in einigen Fällen, andere immer.

Ich gehe davon aus, dass du es tust

%Vor%

Wenn dies der Fall ist, sollte das Feld für die meisten vernünftigen Layouts die Größe nicht ändern (zumindest sollte es nicht wachsen). Layout-Manager verhalten sich oft schlecht, wenn sie in JScrollPane s eingefügt werden.

Nach meiner Erfahrung sind Versuche, die Größen über setMaximumSize und setPreferredWidth usw. zu kontrollieren, bestenfalls prekär. Swing hat sich mit dem Layout-Manager selbst entschieden und es gibt wenig, was man dagegen tun kann.

Alles, was gesagt wurde, ich hatte das Problem, das Sie erfahren, nicht, was mich zu der Annahme verleitet, dass ein vernünftiger Gebrauch eines Layout-Managers das Problem lösen wird.

    
davetron5000 24.09.2008, 16:00
quelle
3

Ich habe das gelöst, indem ich die maximale Breite für den Container des Textfelds mit setMaximumSize festgelegt habe.

Laut der Antwort von Davetron ist dies eine fragile Lösung, da der Layout-Manager diese Eigenschaft ignorieren könnte. In meinem Fall ist der Behälter der oberste, und in einem ersten Test hat es funktioniert.

    
Leonel 24.09.2008 16:23
quelle
3
___ qstnhdr ___ Java, Swing: Wie stelle ich die maximale Breite eines JTextFields ein? ___ tag123java ___ Java (nicht zu verwechseln mit JavaScript oder JScript oder JS) ist eine universelle objektorientierte Programmiersprache, die für die Verwendung in Verbindung mit der Java Virtual Machine (JVM) entwickelt wurde. "Java-Plattform" ist der Name für ein Computersystem, auf dem Tools zum Entwickeln und Ausführen von Java-Programmen installiert sind. Verwenden Sie dieses Tag für Fragen, die sich auf die Java-Programmiersprache oder Java-Plattform-Tools beziehen. ___ answer128191 ___

Ich habe das gelöst, indem ich die maximale Breite für den Container des Textfelds mit %code% festgelegt habe.

Laut der Antwort von Davetron ist dies eine fragile Lösung, da der Layout-Manager diese Eigenschaft ignorieren könnte. In meinem Fall ist der Behälter der oberste, und in einem ersten Test hat es funktioniert.

    
___ tag123swing ___ Swing ist das wichtigste Toolkit für Benutzeroberflächen in Java und wird mit dem Standard-Java-SDK ausgeliefert. Es ist im Paket javax.swing enthalten. ___ antwort129516 ___

Legen Sie keine der Größen im Textfeld fest. Setzen Sie die Spaltengröße stattdessen über setColumns auf einen Wert ungleich Null oder verwenden Sie den Konstruktor mit dem Spaltenargument.

Was passiert, ist, dass die von JTextComponent gemeldete bevorzugte Größe, wenn die Spalten null sind, der gesamte Platz ist, der zum Rendern des Textes benötigt wird. Wenn Spalten auf einen Wert ungleich Null festgelegt sind, ist die bevorzugte Größe die erforderliche Größe, um die vielen Standardspaltenbreiten anzuzeigen. (Bei einer Schriftart mit variabler Zeichenhöhe liegt sie normalerweise nahe bei der Größe des Kleinbuchstabens "m"). Wenn die Spalten auf Null gesetzt sind, fordert das Textfeld so viel Platz wie möglich an und streckt den gesamten Container aus.

Da Sie es bereits in einem GridBagLayout mit einer Füllung haben, könnten Sie die Spalten wahrscheinlich einfach auf 1 setzen und die Füllung auf Basis der anderen Komponenten oder einer anderen geeigneten niedrigen Zahl strecken.

    
___ qstntxt ___

Ich schreibe eine benutzerdefinierte Dateiauswahlkomponente. In meiner Benutzeroberfläche klickt der Benutzer zunächst auf eine Schaltfläche, die ein %code% ; Wenn es geschlossen ist, wird der absolute Pfad der ausgewählten Datei in ein %code% geschrieben.

Das Problem ist, dass absolute Pfade normalerweise lang sind, was dazu führt, dass sich das Textfeld vergrößert und der Container zu breit wird.

Ich habe das versucht, aber es hat nichts gemacht, das Textfeld ist immer noch zu breit:

%Vor%

Derzeit, wenn es leer ist, ist es bereits 400px lang, weil %code% daran angehängt ist.

Ich möchte, dass es wie Textfelder in HTML-Seiten aussieht, die eine feste Größe haben und nicht vergrößern, wenn die Eingabe zu lang ist.

Also, wie setze ich die maximale Größe für ein %code% ?

    
___ tag123jtextfield ___ JTextField ist eine Java Swing-Komponente, die das Bearbeiten einer einzelnen Textzeile ermöglicht. ___ answer128040 ___

Es kann vom Layout-Manager abhängen, in dem sich Ihr Textfeld befindet. Einige Layout-Manager werden erweitert, andere nicht. Manche erweitern sich nur in einigen Fällen, andere immer.

Ich gehe davon aus, dass du es tust

%Vor%

Wenn dies der Fall ist, sollte das Feld für die meisten vernünftigen Layouts die Größe nicht ändern (zumindest sollte es nicht wachsen). Layout-Manager verhalten sich oft schlecht, wenn sie in %code% s eingefügt werden.

Nach meiner Erfahrung sind Versuche, die Größen über %code% und %code% usw. zu kontrollieren, bestenfalls prekär. Swing hat sich mit dem Layout-Manager selbst entschieden und es gibt wenig, was man dagegen tun kann.

Alles, was gesagt wurde, ich hatte das Problem, das Sie erfahren, nicht, was mich zu der Annahme verleitet, dass ein vernünftiger Gebrauch eines Layout-Managers das Problem lösen wird.

    
___
shemnon 24.09.2008 20:01
quelle

Tags und Links