Erstellen von Textfeldern, die sich dynamisch ändert seine Breite
Mache ich, was ist im Grunde eine Symbolleiste enthält ein Suchfeld und einige Schaltflächen. Ich würde gerne für das Feld "suchen" in der Größe wachsen (nur die Breite), wenn der übergeordnete container breiter, wie wenn der Benutzer stellt den split-Bereich. Derzeit ist das Textfeld und die Tasten bleiben die gleichen Größe und Leerzeichen werden Hinzugefügt, die auf jeder Seite als der container erweitert. Ich kann die Erreichung dieses wachsende Wirkung, indem eine BorderLayout
in den Behälter und setzen Sie die Tasten auf LINE_END
und das Textfeld in der CENTER
. Ich habe das problem mit diesem ist, dass das Textfeld jetzt größer ist als eine standard-text-Feld, und es sieht hässlich aus. Dieses Verhalten macht Sinn, da die BorderLayout
manager geben wird, die alle zusätzlichen Leerzeichen (das umfasst eine vertikale und hortizontal Raum) auf die CENTER
text-Feld. Ich habe versucht, zu beschränken, dieses vertikale Wachstum, indem eine maximale Größe auf das Textfeld, aber BorderLayout
wird nicht zu Ehren.
Hier ist was ich habe:
final JTextField searchField = new JTextField("Enter your search terms");
searchField.setMaximumSize(new Dimension(Integer.MAX_VALUE, 25));
final JPanel controls = new JPanel(new BorderLayout());
controls.add(searchField, BorderLayout.CENTER);
controls.add(new JPanel(){{
add(new JButton("Search")); add(new JButton("I'm Feeling Lucky"));
}}, BorderLayout.LINE_END);
Es scheint, dass dieses Verhalten ist ein Häufig gewünscht und es sollte einfach zu implementieren, aber ich hatte kein Glück nach der Suche durch alle Oracle/Sun-tutorials und Google-Suchergebnisse.
Jemand irgendwelche Lösungen dazu? Muss ich kleben mit den standard-Java-Swing Komponenten - keine Bibliotheken von Drittanbietern, bitte.
Danke!
InformationsquelleAutor Nate W. | 2011-04-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich würde vorschlagen, Sie zu verwenden, GridBagLayout , es ist kompliziert, aber es ist die mächtigste layout.. Wenn Sie es lernen, Sie hätten keine layout-Problem.
Hier ist die beispielhafte Nutzung von gridbaglayout für diese Frage...
GridBagLayout
um diesen Effekt zu erzielen? Das wäre ein guter Einstieg in das erlernen dieser layout-manager.Ausgezeichnet! Das war viel weniger schmerzhaft als ich erwartet habe; vielen Dank für Ihre Hilfe.
wie gesagt gridbaglayout ist ein muss für jeden swing-Programmierer.
GridBagLayout nur für Masochisten 😉 Es gibt 3rd-party-layoutManagers zur Verfügung, die sowohl mehr Kraft und mehr einfach zu bedienen, f.ich. jeder der "großen drei" FormLayout, MigLayout, DesignLayout
Ich Stimme mit kleopatra hier. Ich habe ernst gemacht, auf Mängel, auch auf Raster-oder GridBag-layout-Manager nach einem Projekt, wo ich war erforderlich, zu ändern, Anzahl und position von Elementen abhängig von der Benutzerauswahl. Die Standard-layouts sind nur anti-von Natur aus dynamisch. Für mich hilfreich war hier TableLayout. BTW weiß jemand, was mit diesem Projekt vor kurzem konnte ich nicht auf Ihrer Seite?! Viel Glück, Boro.
InformationsquelleAutor Gursel Koca
es ist ein zwei Teil-problem:
a) alle xxSize (xx = min - /max - /pref) sind nur Hinweise an den LayoutManager. Jeder LayoutManager hat sein eigenes Verhalten, ob/wie/Wann er beachtet diese Hinweise und ob/wie/Wann es gegen eine oder mehrere wenn der gesamte Raum ist mehr oder weniger passen würde die Summe pref für alle Komponenten im container. Kein Weg, sondern lernen, die tut, was (Dokumentation ... ehem ... suboptimal)
b) JTextField ist ein bisschen verrückt in so in die Höhe wachsen, auf unbestimmte Zeit, wenn es der Platz erlaubt. Was impliziert, dass auch LayoutManagers, bei denen max (wie f.ich. BoxLayout) keine chance haben, so zu tun, max ist Integer.MAX_VALUE (oder Kurz.MAX? vergessen). Machen Sie es sich Verhalten, Unterklasse und überschreiben die maxSize-die Rückkehr der pref Höhe:
InformationsquelleAutor kleopatra
Sollten Sie in der Lage sein zu verwenden, ein horizontales BoxLayout.
Sollten Sie nicht erraten, die Höhe des Textfeldes.
Ich weiß, Sie sagten, Sie don ' T wollen, verwenden Sie 3rd-party-Bibliotheken, aber als Randnotiz möchten Sie vielleicht zu schauen,Textfeld-Eingabeaufforderung. Es ermöglicht Ihnen die Anzeige einer Nachricht, die wird verschwinden, wenn Sie mit der Eingabe beginnen in das Textfeld ein.
BoxLayout
. Vielleicht könnten Sie ein wenig mehr Informationen als das?wissen Sie sicher besser als empfehlen die Verwendung von api, die nie-nie-touch im app-Entwicklung 🙂 SetXXSize ist off-limits, immer und immer
InformationsquelleAutor camickr
Mit BoxLayout.
Diese dynamisch ändern Sie die Größe des Textfeldes beim ändern der Größe des Rahmens.
InformationsquelleAutor bEn