Wie implementieren Sie eine dynamische GUI in swing
Zunächst, Entschuldigung für das posten etwas, vielleicht ein bisschen übermäßig speziell, aber ich bin nicht sehr erfahren mit Swing, und kann nicht scheinen, um zu finden gute Beispiele, die zu meinen Anforderungen passen.
So, ich bin versucht, herauszufinden, der beste Weg, um zu implementieren, das ein dynamisches GUI für die Auswahl von Filterkriterien in Schwung:
Das zugrunde liegende Modell ist eine Klasse mit einer Liste von Kriterien, die negiert werden (d.h. mit einem NICHT-Präfix) und eine Eigenschaft, die angibt, ob diese kombiniert werden sollen, die mit UND oder ODER.
GUI erlauben würde, dem Benutzer das hinzufügen, ändern oder entfernen von Kriterien, und wählen Sie den Verknüpfungsoperator (und/oder). Das erste Kriterium wäre natürlich keine Kombination-Selektor, und die Dritte und die nachfolgenden Kriterien würde einfach die gleiche Kombination-operator als der zweite.
Den X-Button auf der rechten Seite verwendet werden, zum löschen ein Kriterium. Wenn Sie die Add-Taste gedrückt wird, wird eine neue Linie von Komponenten würde Hinzugefügt, um den Boden.
Wie änderungen vorgenommen werden, diese würde sich in das zugrunde liegende Modell.
Natürlich könnte ich das umsetzen dieser doch Recht "primitiv" einfach durch das hinzufügen von Komponenten zu einem JPanel und dann die Aktualisierung des Modells entsprechend, aber ich würde lieber eine rasche und reibungslose Lösung, wie ein TableModel.
So Frage ich mich, ob eine Tabelle mit ein benutzerdefiniertes TableModel und TableCellRenderer/Editor wäre der beste Ansatz, oder wenn es gibt ein besserer Weg, um etwas umzusetzen, wie dieser. Wenn die Tabelle ist in der Tat der beste Ansatz, ich würde mich freuen, ein paar Tipps, wie man Sie benutzen könnte TableCellRenderers oder -Redakteure, dies zu erreichen.
Vielen Dank im Voraus.
Hoppla, ist nicht meine Muttersprache 🙂
InformationsquelleAutor Rolf | 2011-06-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
nur Beispiel, ist alles hardcoded, für ein gutes Verständnis
EDIT:
als kleopatra bemerkte, zog JTable#fireTableDataChanged() aus ActionListener auf das TableModel geändert alle Klassennamen beginnen mit Kleinbuchstaben
immer noch nicht zufrieden - die fireDataChanged ist nicht nötig: standardmäßig ist brav genug, um Feuer eine rowsInserted 🙂
vereinbart mit diesem, plus entfernt andere meine "Fügt"
o.k wirklich excelent zu fangen, aber um zu vermeiden, spielen Sie mit nutzlosem Wert, der benötigt wird für JTable#fireTableRowsInserted(int firstRow, int lastRow); dann habe ich deaktiviert JTable#fireTableDataChanged(), keine Sorge, das ist DefalutTableModel 🙂
+1 Gutes Beispiel. Ich denke, du meinst "alle - Methode names beginnen mit Kleinbuchstaben." Außerdem Frage ich mich, wenn
Comp
könnteenum
man fürtype
und eine fürrelation
.InformationsquelleAutor mKorbel
Ich denke, solche ein benutzerdefiniertes TableMOdel und TableCellRenderer/- Editor ist die beste Wahl.
http://download.oracle.com/javase/tutorial/uiswing/components/table.html
Das wäre gut zu starten.
InformationsquelleAutor StanislavL
fügen Sie alle Komponenten für eine Suche mit Kriterien zu einem panel und hinzufügen/entfernen Sie den bestimmten Bereich. Ich glaube nicht, dass ein Tablemodel ist hier eine gute Wahl.
während sicherlich eine Frage des Geschmacks, ich Neige zu vereinbaren, - @Rolf: ich sehe nicht viel von "Tabelle-sein" in der Anforderung. mKorbel code-Beispiel ist im Grunde eine deflationierte (einspaltigen) Tabelle, die nicht eine Liste für den alleinigen Grund, dass JList unterstützt keine Bearbeitung 🙂
Ich bin damit einverstanden, dass die GUI ist nicht besonders tabellarisch. Jedoch, wie Sie sagte, JList unterstützt nicht Bearbeiten, also, was ist falsch mit der Verwendung einer Tabelle, selbst wenn es sich als eine Liste? Tatsächlich, ich dachte mehr entlang der Linien von einem vier-Spalten-Tabelle, wobei die Kombination-Selektor, negation, criterium und die Schaltfläche "entfernen" würde, haben Ihre eigenen Spalten.
Mehr zu dem Punkt, haben Sie einen Vorschlag für einen elegante Möglichkeit dies umzusetzen, ohne eine Tabelle?
InformationsquelleAutor BaSche
Netbeans hat eine schöne Benutzeroberfläche, die macht etwas ähnliches zu dem, was Sie beschreiben:
Warum nicht stehen auf den Schultern von Riesen? Die Netbeans-panels gut Aussehen und gut funktionieren. Die Umsetzung ist auch sauber getrennt zwischen ui und model code. Wenn ich in Ihre Schuhe (oder war es Juni 2011), möchte ich meine Lösung auf die Quelle hier:
http://hg.netbeans.org/main/file/14d339767aef/tasklist.ui/src/org/netbeans/modules/tasklist/filter
KeywordPanel.java mit dieser kryptischen Bemerkung: "Die GUI ist auf der Grundlage der im Mozilla-mail-Programm".
Ich Frage mich, was das sein könnte?
Sorry für die späte Antwort.
InformationsquelleAutor Ryan