SWT ComboBox mit DB-Inhalten Designfrage

Status
Nicht offen für weitere Antworten.

moe5k

Mitglied
Hallo,

ich bin mir nicht ganz sicher ob meine Frage hier hinein oder eher ins DB-Forum gehört.

Ich bin dabei eine kleine Anwendung zu programmieren welche u.a. mit SWT-Formularen
via hibernate auf eine DB zugreift.
In einigen Formularen sollen bestimmte Attribute aus Comboboxen mit Inhalten der DB verwendet werden, welche dann wiederum ( über entsprechenden Fremdschlüssel)
an anderer Stelle in die DB eingetragen werden sollen.

Das Laden der Inhalte in die Comboboxen funktioniert soweit.
Nun möchte ich aber vermeiden den selektierten Inhalt der Combobox als String
auszulesen und damit eine weitere Abfrage an die DB zu schicken, um damit das neue
Objekt zu bauen zu können und in die DB einzutragen.
Wurde sicherlich funktionieren aber wäre sicher nicht gerade performant und elegant.

Welche Vorgehendweise wäre hier zu empfehlen ?

Danke schonmal!

moe5k
 

moe5k

Mitglied
Hallo nochmals,

vielleicht habe ich mich etwas umständlich ausgedrückt, dass mein psot biaher unbeantwortet blieb ?

Daher nochmal etwas ausführlicher:

Die Sache an sich bezieht sich auf 2 DB-Tabellen.
In der einen gibt es nur 2 Spalten: ID und Herstellername.
In der anderen Tabelle sollen Teile mit versch. Attributen gespeichert werden und eine
Tabelle in dieser Spalte bekommt als Fremdschlüssel die ID aus der Herstellertabelle.
Zum Zugriff auf die DB wird Hibernate verwendet. Die entsprechenden Mappings sind
auch korrekt gesetzt. Ich übergebe zum persistent machen der Teile jeweils ein Herstellerobjekt.

Nun geht es darum über ein Formular die Teil anzulegen.
Dazu habe ich u.a. eine Combobox, welche mit den Herstellern aus der Herstellertabelle gefüllt wird. Dies mache ich im Moment so:

Java:
                Query q = em.createQuery("select ManufactorName from Manufactor");
                List<String> myManu = q.getResultList();
                combo1.setItems(myManu.toArray(new String[0]));

Um aber nun das korrekte Manufactor Objekt für den DB-Eintrag übergeben zu können,
habe ich es so gemacht:

Java:
        Query q = em.createNamedQuery("loadMan");
        q.setParameter("manText", new String(combo1.getText()) );
        Manufactor manufactor = em.find(Manufactor.class, q.getSingleResult());
        Part part = new Part(manufactor,partType,partModel);
        new MakeEntry(part);

wobei "loadMan" eine NamedQuery mit folgendem Inhalt ist:

Java:
@NamedQuery(name="loadMan", query="select id from Manufactor where manufactorName = :manText")

Das ganze funktioniert zwar wie es soll aber ich finde es sehr umständlich dafür 2 DB-Abfragen etc. zu machen.
Ausserdem ist das doch sicherlich ein Standardproblem, welches schon eleganter gelöst wurde.

Würde mir vorstellen die Hersteller-Objekte nur anfangs einmal zu laden, irgendwie in die Combobox zu bekommen und nacher zu ermitteln welches davon ausgewählt wurde um es beim Anlegen des Teils übergeben zu können.

Würde mich sehr über Anregungen freuen.

moe5k
 

Michael...

Top Contributor
Wenn ich das jetzt richtig verstanden habe geht es eigentlich nur um die zwei Attribute Herstellername und ID aus der ersten Tabelle ?!? Und Du willst dann zwar den Herstellernamen in der ComboBox anzeigen und auswählen lassen, aber Dich bzw. den Programm interessiert dann tatsächlich die ID zum Namen? Dazu sollten sich ein paar Threads hier im Forum finden lassen.
Prinizipiell musst Du Dir ein eigenes Objekt basteln das Name und ID enthält und die Liste mit den Objekten der ComboBox als Daten zur Verfügung stellen. Wenn nur der Name in der Auswahl sichtbar sein soll, ist der einfachste Weg die toString() Methode des neuen Objektes zu überschreiben, der etwas aufwendigere Weg ist einen entsprechenden CellRenderer für die Auswahl zu schreiben.
 
G

Gast2

Gast
Er benutzt SWT das gibt es keine Renderer...
Du kannst dazu noch JFace benutzen und dir einen ComboView basteln.

JFace Überblick, JFace Structured Viewers

Bsp:

Java:
import java.util.ArrayList;
import java.util.List;

import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ComboViewer;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

public class SWTComboExample {

    Display d;

    Shell s;

    public SWTComboExample() {
        d = new Display();
        s = new Shell(d);
        s.setSize(250, 250);
        s.setText("A Combo Example");
        final Combo c = new Combo(s, SWT.READ_ONLY);
        c.setBounds(50, 50, 150, 65);
        ComboViewer comboViewer = new ComboViewer(c);
        comboViewer.setContentProvider(new ArrayContentProvider());
        comboViewer.setLabelProvider(new MyLabelProvider());
        comboViewer.add(createPerson().toArray());
        s.open();
        while (!s.isDisposed()) {
            if (!d.readAndDispatch())
                d.sleep();
        }
        d.dispose();
    }

    public static void main(String[] argv) {
        new SWTComboExample();
    }
    
    private List<Person> createPerson()
    {
        List<Person> list = new ArrayList<Person>();
        list.add(new Person("1","hans","müller"));
        list.add(new Person("2","max","muster"));
        list.add(new Person("3","abc","def"));
        
        return list;
    }
    
    public class MyLabelProvider extends LabelProvider
    {
        @Override
        public String getText(Object element) {
            Person person = (Person) element;
            return person.getId() + " " + person.getNachname();
        }
    }
    
    public static class Person
    {
        private String id;
        private String vorname;
        private String nachname;
        
        
        public Person(String id, String vorname, String nachname) {
            super();
            this.id = id;
            this.vorname = vorname;
            this.nachname = nachname;
        }
        
        public void setId(String id) {
            this.id = id;
        }
        public String getId() {
            return id;
        }
        public void setVorname(String vorname) {
            this.vorname = vorname;
        }
        public String getVorname() {
            return vorname;
        }
        public void setNachname(String nachname) {
            this.nachname = nachname;
        }
        public String getNachname() {
            return nachname;
        }
    }
}
 
Zuletzt bearbeitet von einem Moderator:

moe5k

Mitglied
Danke für das Beispiel !

Wenn in der Combo ein bestimmter Eintrag ausgewählt wurde, möchte ich die Objektreferenz dafür zurückbekommen. Wie kann ich das anstellen ?

Gruß Moe
 

moe5k

Mitglied
Ich habe noch ein wenig getest und bin dabie auf folgendes gekommmen um an die Objektreferenz des ausgewählten eintrages zu kommen:

Java:
        Person p1 = (Person)comboViewer.getElementAt(c.getSelectionIndex());

Ist das zu umständlich ? Geht es noch einfacher ?

Moe
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Element aus comboBox mit observableList löschen AWT, Swing, JavaFX & SWT 3
T Combobox mit Autocomplete-Funktion AWT, Swing, JavaFX & SWT 7
J Eingaben aus Textfield & ComboBox speichern und in ComboBox wieder ausgeben AWT, Swing, JavaFX & SWT 3
N Promt Text der Combobox AWT, Swing, JavaFX & SWT 0
Doppel JavaFX ComboBox AWT, Swing, JavaFX & SWT 5
P JavaFX ClassCastException bei ComboBox.getValue AWT, Swing, JavaFX & SWT 4
F Wie bekomme ich den Wert der ComboBox in eine Variable gespeichert welche ich für meinen ActionListener nutzen kann? AWT, Swing, JavaFX & SWT 3
M Swing Java Swing/AWT Combobox Bug AWT, Swing, JavaFX & SWT 3
M Combobox bild anklicken AWT, Swing, JavaFX & SWT 2
L JavaFX Wiederspenstige ComboBox AWT, Swing, JavaFX & SWT 0
P Combobox und Enum AWT, Swing, JavaFX & SWT 3
L ComboBox Wert automatisch auswählen AWT, Swing, JavaFX & SWT 6
L Methode zum Füllen einer ComboBox AWT, Swing, JavaFX & SWT 4
K Nullpointer Combobox Listener AWT, Swing, JavaFX & SWT 2
K JavaFX Combobox, Textfield & setOnMouseClicked AWT, Swing, JavaFX & SWT 2
it_is_all Swing Button, ComboBox,... -- Unterschied: NetBeans Design <-> Ausführung AWT, Swing, JavaFX & SWT 2
D JavaFX ComboBox String setzen AWT, Swing, JavaFX & SWT 20
offi Combobox in TableCell AWT, Swing, JavaFX & SWT 1
D Javafx Combobox Abfrage aus mysql AWT, Swing, JavaFX & SWT 8
K Event Handling ComboBox Event Handler AWT, Swing, JavaFX & SWT 7
MrSnake ComboBox-Einträge werden unsichtbar AWT, Swing, JavaFX & SWT 0
L ComboBox: slider positionieren AWT, Swing, JavaFX & SWT 0
M JavaFX ComboBox: Update zur Laufzeit AWT, Swing, JavaFX & SWT 16
M JavaFX Combobox bindBidirectional AWT, Swing, JavaFX & SWT 4
D [Anfänger]ComboBox erstellt Einträge in einer anderen ComboBox AWT, Swing, JavaFX & SWT 3
T JavaFX Editable Combobox Text-Selektierung nach Trigger AWT, Swing, JavaFX & SWT 4
H Combobox aktualisieren AWT, Swing, JavaFX & SWT 2
G Swing ComboBox: Auswahl eines Items der Liste durch Eingabe eines Buchstabens AWT, Swing, JavaFX & SWT 3
M JavaFX ComboBox AWT, Swing, JavaFX & SWT 5
T Problem: ComboBox und addItem AWT, Swing, JavaFX & SWT 5
J ComboBox als Filter benutzen AWT, Swing, JavaFX & SWT 1
M ausgewählte Inhalt von ListItem inn ComboBox in der Tabelle speichern AWT, Swing, JavaFX & SWT 0
Developer_X Java JTable - Combobox + Checkbox - Cellrenderer + Editor AWT, Swing, JavaFX & SWT 3
G Dynamische ComboBox AWT, Swing, JavaFX & SWT 3
U Combobox mit individuellen Texten AWT, Swing, JavaFX & SWT 5
M JavaFX Combobox - Item Auswahl mit Tasten AWT, Swing, JavaFX & SWT 8
F JavaFX Daten aus Tabelle in ComboBox AWT, Swing, JavaFX & SWT 9
C Beschriftungen von Tabellenspalten mit Combobox aussuchen AWT, Swing, JavaFX & SWT 2
G JavaFX ComboBox .getItems().add() Problem AWT, Swing, JavaFX & SWT 9
D Swing [Frage] ComboBox + Label AWT, Swing, JavaFX & SWT 3
F SWT Problem mit Tabelle und Combobox in einem Wizard AWT, Swing, JavaFX & SWT 5
B JAVAFX icon in ComboBox einfügen AWT, Swing, JavaFX & SWT 5
W Swing Combobox Abhängigkeit AWT, Swing, JavaFX & SWT 1
S ComboBox-Werte aus einem Array an Textfields übergeben AWT, Swing, JavaFX & SWT 3
A Swing GUI mit ComboBox, wenn Item ausgewählt wurde neues GUI AWT, Swing, JavaFX & SWT 7
S Combobox aktualisieren AWT, Swing, JavaFX & SWT 3
B Erstellen eigener Combobox ("CellFactory") AWT, Swing, JavaFX & SWT 4
C Swing ComboBox - ActionListener deaktivieren AWT, Swing, JavaFX & SWT 2
A combobox automatisch in ein textfeld wechseln AWT, Swing, JavaFX & SWT 3
J Swing Drive-ComboBox AWT, Swing, JavaFX & SWT 7
C TextFeld in Verbindung zur ComboBox automatisch aktualisieren AWT, Swing, JavaFX & SWT 7
L Swing Model für ComboBox AWT, Swing, JavaFX & SWT 14
H Combobox in einer einzelnen Zelle der Jtable AWT, Swing, JavaFX & SWT 2
T Java Combobox Problem AWT, Swing, JavaFX & SWT 3
C SWT Combobox mit Textdatei füllen AWT, Swing, JavaFX & SWT 2
M comboBox Listener? AWT, Swing, JavaFX & SWT 2
R Datenbanktabellen in Combobox AWT, Swing, JavaFX & SWT 3
C Combobox bei Tabellenänderung mit aktualisieren AWT, Swing, JavaFX & SWT 11
1 CellEditor mit ComboBox richtig beenden AWT, Swing, JavaFX & SWT 4
L SWT Actionlistener Combobox öffnen AWT, Swing, JavaFX & SWT 4
E Swing CellEditor mit Combobox durch Tastatureingabe editieren?! AWT, Swing, JavaFX & SWT 3
GianaSisters Swing ComboBox im jTable (in bestimmter Zelle nicht über die ganze Spalte) AWT, Swing, JavaFX & SWT 4
T Daten mittels ComboBox in ein JTable adden AWT, Swing, JavaFX & SWT 7
N Filternde Combobox in JTable verliert Fokus nach erster Eingabe AWT, Swing, JavaFX & SWT 2
F Wert zu Eintrag in ComboBox speichern?! AWT, Swing, JavaFX & SWT 7
P Swing ComboBox(en) in JTable auslesen und ausgeben AWT, Swing, JavaFX & SWT 11
M Index von Combobox AWT, Swing, JavaFX & SWT 20
L ComboBox in Action AWT, Swing, JavaFX & SWT 4
D ComboBox & CellListRenderer AWT, Swing, JavaFX & SWT 6
D ComboBox-Model mit Observer AWT, Swing, JavaFX & SWT 3
B Taschenrechner mit ComboBox AWT, Swing, JavaFX & SWT 7
T ComboBox auslesen AWT, Swing, JavaFX & SWT 11
P Combobox liesst falschen Wert AWT, Swing, JavaFX & SWT 10
C Combobox im JFrame aus Datenbank befüllen AWT, Swing, JavaFX & SWT 6
M Combobox soll Farbe einer Komponente setzen AWT, Swing, JavaFX & SWT 2
M Swing ComboBox ein SelectedItem übergeben/anzeigen AWT, Swing, JavaFX & SWT 7
J Werte aus Combobox speichern AWT, Swing, JavaFX & SWT 3
J Combobox als Filterkriterium (Gruppierung) in JTable AWT, Swing, JavaFX & SWT 7
R Swing ComboBox und doppelter Event!? AWT, Swing, JavaFX & SWT 10
M SWT Wie Textfeld hinzufügen, nach Auswahl von einem bestimmten Combobox-item? AWT, Swing, JavaFX & SWT 3
W MouseListener im editable ComboBox AWT, Swing, JavaFX & SWT 14
W Combobox mit eingabefeld AWT, Swing, JavaFX & SWT 7
T Editable ComboBox / kein Weiterspringen AWT, Swing, JavaFX & SWT 12
M Combobox in JTable AWT, Swing, JavaFX & SWT 4
S Swing ComboBox aus Array befüllen AWT, Swing, JavaFX & SWT 2
K Per ComboBox Dateien einlesen AWT, Swing, JavaFX & SWT 23
0 Hintergundfarbe von editierbarer ComboBox ändern AWT, Swing, JavaFX & SWT 2
M Frage zu ComboBox AWT, Swing, JavaFX & SWT 7
O Bitte um Hilfe bei ComboBox in TableHeader AWT, Swing, JavaFX & SWT 9
A NetBeans und ComboBox AWT, Swing, JavaFX & SWT 2
SuperSeppel13 Combobox zur Farbwahl kollidiert mit NimbusLookAndFeel AWT, Swing, JavaFX & SWT 7
D ComboBox(Model) mit dummyItem AWT, Swing, JavaFX & SWT 10
D Inhalt von Textfield nach ComboBox AWT, Swing, JavaFX & SWT 2
GilbertGrape nochmal editierbare Combobox AWT, Swing, JavaFX & SWT 3
GilbertGrape JTable mit Combobox-Editierung schon nach einem Klick AWT, Swing, JavaFX & SWT 7
E Swing Button ActionListener Infos aus Textfield und ComboBox AWT, Swing, JavaFX & SWT 3
G ComboBox wird nicht angezeigt beim anhängen an eine Gruppe AWT, Swing, JavaFX & SWT 2
G Combobox Event AWT, Swing, JavaFX & SWT 4
G ComboBox aktualisieren AWT, Swing, JavaFX & SWT 13
C Binding eines EntityBean als SelectionInList in ComboBox AWT, Swing, JavaFX & SWT 7

Ähnliche Java Themen

Neue Themen


Oben