Swing Dynamisch auf Objekte in einer GUI zugreifen

Airwolf89

Aktives Mitglied
Hallo,

ich habe mal wieder ein kleines Problemchen:

Also, ich habe eine GUI. Dort habe ich ein TabbedPane. In jedem Tab befindet sich ein Panel mit allerlei Zeugs drauf. In jedem Tab gibt es auf diesen Panels ein Scrollpane in welchem wieder ein Panel eingebettet ist, in diesen Panels sind dann jede menge Label, Eingabefelder und ein Button drauf.

Ich möchte mir jetzt gerne eine Methode schreiben mit welcher ich diese Eingabefelder füllen kann. Die Daten kommen aus ner SQL Abfrage. Wie kriege ich das jetzt hin, dass ich abhängig von einem Parameter auf nen bestimmtes Panel zugreife (würde das jetzt mit ner Switch Case Abfrage machen) und dann die Eingabefelder fülle bzw. Werte in Comboboxen setze (als ausgewählter Wert in der Box)

Wie könnte ich sowas machen? Habe da schonmal angefangen:

Java:
int comp_count = 0;

        switch (index) {
            case 0: // cpu
                // Hier rechne ich so komisch weil die Hälfte der Komponenten 
                //Labels sind und noch zusätzlich ein Button dabei ist
                comp_count = (JP_cpu.getComponentCount() / 2) - 1;
                Component[] comps = new Component[comp_count];
                comps = JP_cpu.getComponents();

                for (int i = 0; i < comps.length; i++) {

                }
                break;
            case 1: // mobo
                break;
            case 2: // gpu
                break;
            case 3: // ram
                break;
            case 4: // nt
                break;
            case 5: // hdd
                break;
            case 6: // drv
                break;
            case 7: // cases
                break;
            case 8: // cool
                break;
            case 9: // nic
                break;
            case 10: // snd_card
                break;
            case 11: // monitor
                break;
        }

Problem ist jetzt aber dass ich über die Komponenten nicht auf die entsprechenden Methoden zugreifen kann, z.B. für die Eingabefelder setText() oder setSelectedItem() für die Comboboxen. Wie kann ich dynamisch auf die zugreifen?

Sache ist die, es handelt sich um über 300 Elemente, die will ich nicht einzeln schreiben und befüllen.

Danke im voraus.
 

tuttle64

Bekanntes Mitglied
Problem ist jetzt aber dass ich über die Komponenten nicht auf die entsprechenden Methoden zugreifen kann, z.B. für die Eingabefelder setText() oder setSelectedItem() für die Comboboxen. Wie kann ich dynamisch auf die zugreifen?


Wenn Du die Komponente entsprechend ihrem Typ castest, dann sind auch die Methoden verfügbar. Aber hierzu musst Du natürlich wissen, um was es sich für eine Komponente handelt.

Beispiel:

Code:
	   Component button = new JButton("Button");
	   // button kennt setText nicht, aber mit cast schon
	   ((JButton)button).setText("new Button");
 
Zuletzt bearbeitet:

Meru

Bekanntes Mitglied
Dein zweites Problem dürfte wohl sein, dass wenn du bsp. 100 Textfelder hast, den Text aus der DB auch in das richtige Feld schreibst.

Ich behelfe mir bei solchen Sachen meist der Reflection-API.

Mein erster Ansatz wäre vielleicht, dass ich für jedes Feld nen getter mache nach folgender Konvention (FieldName = Spaltenname):
Java:
private JTextfield fieldABC;
private JTextfield fieldXYZ;


private JTextField fieldABC(){
    return fieldABC
}


Nun hast du ein Datenelement aus der DB, welches die FieldNamen und die Value hat.
Jetzt kannst du mittels Reflection das Panel durchgehen und nach methodenNamen suchen, die mit "ABC" aufhören.
Nun kannste die Methode via Reflection (invoke oder so) aufrufen und dann setText("agksd") machen. Natürlich abhängig vom Typ (Checkbox oder JTextField).
 

_Andi91

Bekanntes Mitglied
ich würde es so machen:

Du hast eine Map bestehend aus den Daten aus der SQL Abfrage. Die Map hat je Eintrag einen Bezeichner und einen Wert.
Der Bezeichner muss je genauso heisen wie die Komponente.
Dann kannst du dir mittels Reflection über den Bezeichner in der Map die dazugehörige Komponente holen ( getClass().getDeclaredField("bezeichner") ).
Anschließend setzt du das Feld accessible (setAccessible(true))

Dann musst du noch Prüfen ob es eine Instanz von JTextField, JComboBox etc ist
wenn ja casten und entpsrechend setText, setSetSelectedItem oder was auch immer aufrufen mit Übergabe des Wertes in der Map.
 

Airwolf89

Aktives Mitglied
Hallo,

also erstmal danke für eure vielen Vorschläge.

Das mit der Abfrage ist kein großes Problem, die Eingabefelder sind exakt in der Reihenfolge wie in der Datenbank, von daher würde das mit ner einfachen For-Schleife gehen.

Das mit dem Casten hörte sich gut an. Das Problem ist nur dass ich ja verschiedene Elemente habe, also mal Panel und mal ComboBoxen.

Hab es mal so probiert:

Java:
comp_count = (JP_cpu.getComponentCount() / 2) - 1;
                Component[] comps = new Component[comp_count];
                comps = JP_cpu.getComponents();

                for (int i = 0; i < comps.length; i++) {
                    try {
                        comps[i] = new JButton();
                        (JButton)comps[i].setText("");
                    } catch (Exception e) {
                        comps[i] = new JComboBox();
                        (JComboBox)comps[i].setSelectedItem("");
                    }
                }

Allerdings zeigt er mir dann einen Fehler an dass er die Methoden nicht findet, da sie nicht auf ein Component anwendbar sind.
 

tuttle64

Bekanntes Mitglied
Der Cast ist fehlerhaft. Wegen der Prirität des Punkts musst Du anderst klammern. Versuche mal


Hab es mal so probiert:

Java:
comp_count = (JP_cpu.getComponentCount() / 2) - 1;
                Component[] comps = new Component[comp_count];
                comps = JP_cpu.getComponents();

                for (int i = 0; i < comps.length; i++) {
                    try {
                        comps[i] = new JButton();
                        ((JButton)comps[i]).setText("");
                    } catch (Exception e) {
                        comps[i] = new JComboBox();
                        ((JComboBox)comps[i]).setSelectedItem("");
                    }
                }

Allerdings zeigt er mir dann einen Fehler an dass er die Methoden nicht findet, da sie nicht auf ein Component anwendbar sind.
 

Airwolf89

Aktives Mitglied
Hi,

welche Exception soll geworfen werden? Ich dachte mir wenn er eine ComboBox in als Komponente hat, dann wird er die schwer in ein Textfeld casten können. (In dem text den ich gezeigt habe war nen fehler drin, soll kein Button sein sondern ein textfeld) Von daher dachte ich fange ich da die Exception ab die kommen sollte wenn er das nicht casten kann und versuche es dann mit der Combobox.

Aber was anderes. ich schlage mich schon die ganze Zeit damit herum nur die textfelder und Comboboxen in der Liste zu haben.

Habs bis jetzt so:

Java:
comp_count = JP_cpu.getComponentCount();
Component[] comps = new Component[comp_count];
Component[] comps2 = new Component[comp_count];
comps2 = JP_cpu.getComponents();

  for (int i = 0; i < comps2.length; i++) {
    if (comps2[i].getAccessibleContext().getAccessibleName().contains("Label")) {
      comps[i] = comps2[i];
    }
  }

Allerdings ist mein Problem dass ich mit Accessible Name nur den Text von Labels rauskriege, bei Textfeldern und Comboboxen kriege ich ne NullPointerException.

Wie kann ich das lösen?

Danke im voraus.
 

Airwolf89

Aktives Mitglied
Ok, ich habe das jetzt hinbekommen.

Danke an alle.

Hier meine Lösung, für Verbesserungsvorschläge bin ich weiterhin dankbar.

Java:
int comp_count = 0;

        comp_count = JP.getComponentCount();
        ArrayList<Component> comps = new ArrayList<Component>();
        ArrayList<Component> comps2 = new ArrayList<Component>();

        for (int i = 0; i < ((comp_count / 2)); i++) {
            comps.add(this);
        }

        for (int i = 0; i < comp_count; i++) {
            comps2.add(JP_cpu.getComponent(i));
        }

        for (int i = 0; i < comps2.size(); i++) {
            String[] splittedNames = null;
            if (comps2.get(i).getName().contains("Label")
                    || comps2.get(i).getName().contains("Button")) {
                // I don't want labels or buttons
            } else {
                splittedNames = comps2.get(i).getName().split("_");
                comps.set(Integer.parseInt((splittedNames[3])) - 1, comps2.get(i));
            }
        }

        for (int i = 0; i < comps.size(); i++) {
            try {
                ((JTextField) comps.get(i)).setText(String.valueOf(results.get(0).get(i)));
            } catch (Exception e) {
                ((JComboBox) comps.get(i)).setSelectedItem(String.valueOf(results.get(0).get(i)));
            }
        }
    }

Hiermit hole ich mir alle Felder in einem Panel, welches ich übergebe und fülle die entsprechend mit den daten aus der Abfrage.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
MaxG. Swing Dynamisch grafische Objekte erzeugen AWT, Swing, JavaFX & SWT 12
J Swing/AWT | Dynamisch erzeugte Objekte ansprechen AWT, Swing, JavaFX & SWT 1
A Swing Dynamisch Objekte erzeugen AWT, Swing, JavaFX & SWT 3
L Dynamisch Objekte in Canvas zeichnen AWT, Swing, JavaFX & SWT 5
W JavaFX Farben dynamisch anpassen AWT, Swing, JavaFX & SWT 4
B Größe der Parent-Component dynamisch an children anpassen AWT, Swing, JavaFX & SWT 30
K Buttons dynamisch erstellen (NetBeans) AWT, Swing, JavaFX & SWT 10
ralfb1105 JavaFX TreeView dynamisch aus Datenbank Tabelle erstellen AWT, Swing, JavaFX & SWT 22
ralfb1105 JavaFX Dynamisch TableView Spalten erstellen AWT, Swing, JavaFX & SWT 4
A Swing JPanels dynamisch untereinander einfügen AWT, Swing, JavaFX & SWT 3
Wurstsemmel SWT MenuItem dynamisch hinzufügen AWT, Swing, JavaFX & SWT 2
L JavaFX List oder TableView Größe dynamisch anpassen? AWT, Swing, JavaFX & SWT 4
Thallius JTable dynamisch Spaltenanzahl verändern AWT, Swing, JavaFX & SWT 2
Thallius JTable dynamisch laden? AWT, Swing, JavaFX & SWT 2
S CombinedDomainXYPlot und dynamisch hinzugefügte subplots: Darstellungsprobleme AWT, Swing, JavaFX & SWT 3
K Liniendicke für Line Chart dynamisch ändern AWT, Swing, JavaFX & SWT 0
N Swing Wie Programm strukturieren? (Dynamisch Komponenten hinzufügen) AWT, Swing, JavaFX & SWT 1
llabusch JavaFX Dynamisch alles vergrößern (wie im Browser) AWT, Swing, JavaFX & SWT 3
agent47 JavaFX TreeView Struktur dynamisch einlesen AWT, Swing, JavaFX & SWT 1
D JavaFX Dynamisch erzeugte Buttons sollen Code ausführen. AWT, Swing, JavaFX & SWT 2
D JavaFX Dynamisch erzeugte Checkboxen aus VBox auslesen AWT, Swing, JavaFX & SWT 3
I JTable dynamisch aus ArrayList befüllen AWT, Swing, JavaFX & SWT 3
T JavaFX Flexible Layouts dynamisch erstellen / Design-Inspirationen AWT, Swing, JavaFX & SWT 8
T Dynamisch mehrere Checkboxen anlegen AWT, Swing, JavaFX & SWT 2
J JavaFX TextArea dynamisch Icon im Background anzeigen AWT, Swing, JavaFX & SWT 2
T JPanel dynamisch erstellen AWT, Swing, JavaFX & SWT 4
G FormLayout dynamisch wachsend AWT, Swing, JavaFX & SWT 0
T JTable dynamisch mit ArrayList AWT, Swing, JavaFX & SWT 2
A Swing Logikaufgabe: Zeilenanzahl einer JTable mit 3d String dynamisch anpassen AWT, Swing, JavaFX & SWT 2
T Swing JScrollPane in JPanel - Breite dynamisch, Höhe fix - wie? AWT, Swing, JavaFX & SWT 2
P TableViewerColumn dynamisch erzeugen AWT, Swing, JavaFX & SWT 3
Kandum obj_JMenu.addMenuListener - variable Anzahl an JMenus / menulistenern & frame.setTitle() dynamisch AWT, Swing, JavaFX & SWT 7
A HELP: JFieldText dynamisch setzen -> langsam AWT, Swing, JavaFX & SWT 19
C Swing CardLayout dynamisch erweitern AWT, Swing, JavaFX & SWT 11
B Link eines Icons dynamisch gestalten AWT, Swing, JavaFX & SWT 2
P ScrollPane nach zeichnen dynamisch resize AWT, Swing, JavaFX & SWT 7
B JToolBar dynamisch auf mehrere Zeilen erweitern AWT, Swing, JavaFX & SWT 2
I Jlist dynamisch aus Datenbank füllen AWT, Swing, JavaFX & SWT 14
P Gifs dynamisch auf GUI anzeigen AWT, Swing, JavaFX & SWT 4
E Breite eines JButton dynamisch ändern AWT, Swing, JavaFX & SWT 3
P Swing Dynamisch zeichnen mit Shapes wie Rectangle2D.Float ? AWT, Swing, JavaFX & SWT 6
C SWT - widget dynamisch erzeugen und anzeigen AWT, Swing, JavaFX & SWT 10
C Tooltip dynamisch setzen AWT, Swing, JavaFX & SWT 7
T Elemente zu JList dynamisch hinzufügen AWT, Swing, JavaFX & SWT 4
X jTextFields dynamisch initialisieren AWT, Swing, JavaFX & SWT 2
L Label dynamisch awt AWT, Swing, JavaFX & SWT 2
H Swing Symbol in Taskleiste dynamisch aus- bzw. einblenden AWT, Swing, JavaFX & SWT 14
B JTabbedPane mit Enumeration dynamisch füllen AWT, Swing, JavaFX & SWT 5
D Panels Dynamisch zur Laufzeit austauschen AWT, Swing, JavaFX & SWT 2
J Java 2D - dynamisch zeichnen AWT, Swing, JavaFX & SWT 4
A AWT HSB-Farben dynamisch berechnen AWT, Swing, JavaFX & SWT 5
P Dynamisch Sortieren AWT, Swing, JavaFX & SWT 2
B Swing Dynamisch Elemente in JScrollPane hinzufügen AWT, Swing, JavaFX & SWT 6
Airwolf89 Swing Tabs dynamisch ausblenden AWT, Swing, JavaFX & SWT 3
H Swing Register (jTabbedPane) dynamisch hinzufügen? AWT, Swing, JavaFX & SWT 7
Airwolf89 Swing Anzahl der Tabellenspalten dynamisch setzen AWT, Swing, JavaFX & SWT 2
S SWT WizardPage - Button anzeigen und Text-Widgets dynamisch aktualisieren AWT, Swing, JavaFX & SWT 12
R JLabel und JSlider dynamisch erzeugen? AWT, Swing, JavaFX & SWT 3
W Swing dynamisch Buttons in JEditorPane erstellen AWT, Swing, JavaFX & SWT 2
Pithecanthropus Swing JPanels dynamisch austauschen AWT, Swing, JavaFX & SWT 8
S Applet mit Graphics dynamisch vergrößern AWT, Swing, JavaFX & SWT 3
Spot84 jtable mit checkboxnode dynamisch per arraylist füllen AWT, Swing, JavaFX & SWT 8
bugmenot Dynamisch erzeugte jLabels werden nicht angezeigt. AWT, Swing, JavaFX & SWT 5
ABstraCT JCombobox dynamisch füllen (erstes Element Problem) AWT, Swing, JavaFX & SWT 4
J JLabels usw. dynamisch anlegen AWT, Swing, JavaFX & SWT 8
A JList dynamisch vergrößern AWT, Swing, JavaFX & SWT 4
G Felder dynamisch erzeugen! AWT, Swing, JavaFX & SWT 3
I Textfields dynamisch erzeugen AWT, Swing, JavaFX & SWT 4
G Dynamisch Komponenten in einem JPanel bzw JFram austauschen AWT, Swing, JavaFX & SWT 7
B JTree dynamisch aufbauen AWT, Swing, JavaFX & SWT 3
L JPanel dynamisch zuweisen AWT, Swing, JavaFX & SWT 5
T Inhalt einer Combobox dynamisch erstellen? AWT, Swing, JavaFX & SWT 13
S JTextField-Größe dynamisch an Inhalt anpassen. AWT, Swing, JavaFX & SWT 3
S Farben eienr JTextPane dynamisch zuweisen AWT, Swing, JavaFX & SWT 2
J Zugriff auf "dynamisch erzeugte" JTextFields AWT, Swing, JavaFX & SWT 2
D Systray-Icon dynamisch zeichnen AWT, Swing, JavaFX & SWT 8
B JTree dynamisch nachladen AWT, Swing, JavaFX & SWT 3
U Label Icon dynamisch belegen AWT, Swing, JavaFX & SWT 12
F JRadioButton dynamisch benennen? AWT, Swing, JavaFX & SWT 7
A dynamisch weitere jpanels untereinander hinzufügen AWT, Swing, JavaFX & SWT 10
S dynamisch erzeugte buttons AWT, Swing, JavaFX & SWT 22
J Größe einer JTextArea dynamisch anpassen. AWT, Swing, JavaFX & SWT 2
F Komponente dynamisch erzeugen AWT, Swing, JavaFX & SWT 4
M ImageObserver, Bild dynamisch erzeugen und Speichern AWT, Swing, JavaFX & SWT 24
M gezeichnete Punkte dynamisch verschieben mit mousedragged AWT, Swing, JavaFX & SWT 4
S inhalt dynamisch erzeugter JComboBoxs auslesen AWT, Swing, JavaFX & SWT 3
G Mousecursor selber dynamisch generieren. AWT, Swing, JavaFX & SWT 6
G JRadioButton dynamisch erzeugen AWT, Swing, JavaFX & SWT 6
M Look and Feels dynamisch abfragen AWT, Swing, JavaFX & SWT 13
S Columnname dynamisch verändern AWT, Swing, JavaFX & SWT 2
H JComboBoxen dynamisch erzeugen AWT, Swing, JavaFX & SWT 3
K toolbar dynamisch erzeugen AWT, Swing, JavaFX & SWT 2
L Komponenten dynamisch erkennen und bearbeiten AWT, Swing, JavaFX & SWT 8
H große mengen an jbuttons dynamisch erzeugen? AWT, Swing, JavaFX & SWT 15
Juelin Objekte refresh AWT, Swing, JavaFX & SWT 3
N Graphics Objekte scalen mit Veränderung des Bildschirms AWT, Swing, JavaFX & SWT 19
berserkerdq2 Skalieren sich javafx objekte automatisch auf die Bildschirmgröße AWT, Swing, JavaFX & SWT 6
Redeason Objekte in meiner GUI verschieben AWT, Swing, JavaFX & SWT 1
_user_q Objekte vom MainController in anderen Controller verwenden und andersherum (NullPointerException) AWT, Swing, JavaFX & SWT 14
_user_q JavaFX Wie kann ich alle Objekte außer eins deaktivieren (das Gleiche mit BoxBlur)? AWT, Swing, JavaFX & SWT 11

Ähnliche Java Themen

Neue Themen


Oben