Master-Detail Form und filtern

beginner99

Aktives Mitglied
Hallo zusammen,

hab mal diesen bereich gewählt, da es mehr um GUI als Datenbank geht, aber beides ist relevant.

Ich möchte eine 1:N relation in einer Master-detail view anzeigen. Netbeans hat ne standardform dafür nur möchte ich die Abändern und genua der teil fällt mir schwer.

Was ich habe:

Entitätsklassen + JPA (TopLink).
Nebeans erstellt daraus automatisch eine form über beansbinding. Bin in all diesen Bereichen (ausser Datenbank Anfänger. Es geht auch um ein "Lernprojekt" (benotet), nichts kommerzielles.

Was macht die erstellte Form?
Wenn ich im master Table auf einen eintrag klicke werden im detail table gleich alle einträge angezeigt.
Das ganze funktioniert über eine Liste (ManyToOne Beziehung der enity class ist ne Liste).

Java:
org.jdesktop.beansbinding.ELProperty eLProperty = org.jdesktop.beansbinding.ELProperty.create("${selectedElement.messageList}");

Ich möchte jetzt, dass dies nicht automatisch bei wechseln des selektierten Master Eintrages passiert sondern erst, wenn man ein Suchkriterium eingegeben hat. Am besten wäre es 1 textbox pro spalte. Das Filtern sollte dann automatisch passieren während der eingabe, ideal mit ner kleinen verzögerung ;)(->"AJAX-mässig").

Die Detail tabelle müsste ich als an einen JPA Query binden.
Ich brauche die id(PK) des selektierten Eintrages im master Table. (ListSelectionListener).
Bei jeder Selektionsänderung, muss man den id parameter im Query neu setzen.

Das gleiche gilt für die Textbox(en). zu beginn mal nur eine. Die brauchen auch einen listener, welcher den Query updated.
Dann muss ich noch schauen, dass erst nach einer Parameter (Kriterium) Eingabe eine suche startet.
Am besten mache ich das im ListSelectionListener if textfeld.gettext().equals("") -> setzte id parameter auf -1 (oder genau gesagt der default wert ist -1 und wird nur geändert, wenn ein eintrag selektiert is und kriterien eingegeben sind).

Macht das Sinn?

Gibt es da nicht einen direkteren apporach? Vorgefertigte anpassbare lösung?
 

beginner99

Aktives Mitglied
Also ich erkläre mal, was an meiner Idee noch nicht geht:

Der Detail Table zeigt keine Daten an. Wieso ist mir aber schleierhaft.

Code:

Java:
masterTable = new javax.swing.JTable();

masterTable.setAutoCreateRowSorter(true);
ListSelectionModel rowSM = masterTable.getSelectionModel();
rowSM.addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent e) {
if (e.getValueIsAdjusting()){       
       try{
       detailTableBinding.unbind();
       int row = masterTable.getSelectedRow();
       // gets the userid
       Integer id = (Integer)(masterTable.getModel().getValueAt(row, 0));
       messageQuery.setParameter("userid", id);
       messageList = messageQuery.getResultList();
       detailTableBinding.bind();
       //print list content to console
       for (Object m : messageList ){
       System.out.println(m);
}
       }catch(ArrayIndexOutOfBoundsException ex){
        ex.printStackTrace();        
       }
}
}});

Jedesmal wenn ich im masterTable die selektierte Zeile ändere, setzte ich den Query Parameter auf diese ID. Anhand des for-loops sehe ich, dass dies auch funktioniert, d.h die Liste wird korrekt gefüllt.
Die Liste ist an den detailTable gebunden.
Nur was auch immer ich mache, der detailTable bleibt leer und es wir auch keine Exception geworfen.
Irgendwie passiert kein update zwischen liste und table. Anders kann ich mir das nicht erklären. So wie ich das verstanden habe mit dem binding sollte das aber automatisch passieren? Also das unbind und bin wäre gar nicht nötig.

Ideen?
 

beginner99

Aktives Mitglied
Also falls jemand mal das gleiche Problem hat oder es sonst wenn interessiert, hier die Lösung:

a)

netbeans code generator macht einen kleinen Fehler. Er erstellt eien normale List anstatt eine ObservableList. Richtig ist:

Java:
messageList = java.beans.Beans.isDesignTime() ? java.util.Collections.emptyList() : org.jdesktop.observablecollections.ObservableCollections.observableList(messageQuery.getResultList());

b)

Änderungen an der Liste werden nicht bemerkt, wenn man einfach die Liste komplett neu zuweist.
also:
Java:
messageList = org.jdesktop.observablecollections.ObservableCollections.observableList(messageQuery.getResultList());
bewirkt nichts.

Damit das ganze funktioniert, muss man die vorhandene Liste ändern:

Java:
messageQuery.setParameter("userid", id); 	
messageList.clear();                               
messageList.addAll(messageQuery.getResultList());

Das ist natürlich nicht sehr intuitiv.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
I JTable mit einem Button zu einer Detail Seite springen AWT, Swing, JavaFX & SWT 4
D JButton Form verändern AWT, Swing, JavaFX & SWT 4
Monokuma Canvas Form entfernen AWT, Swing, JavaFX & SWT 2
Monokuma 2D-Grafik Imageimport durch eine gezeichnete Form ersetzen AWT, Swing, JavaFX & SWT 16
F Variablen an eine Form binden? AWT, Swing, JavaFX & SWT 2
A Swing Wie Daten in der Form speichern? Array oder ArrayList AWT, Swing, JavaFX & SWT 2
M Gui-Form alle Labels anzeigen AWT, Swing, JavaFX & SWT 4
K Swing JPanel ueber komplette Form legen AWT, Swing, JavaFX & SWT 1
J Swing JSlider - Form des Reglers AWT, Swing, JavaFX & SWT 6
R Prüfen ob Form bereits geöffnet AWT, Swing, JavaFX & SWT 9
E Mit Netbeans von einer Form auf eine Komponente einer anderen Form zugreifen AWT, Swing, JavaFX & SWT 2
B Swing Form undecorated: Beim Bewegen geht die Maus immer automatisch zur linken Seite. AWT, Swing, JavaFX & SWT 7
T Tetris - nächste Form anzeigen AWT, Swing, JavaFX & SWT 6
W Java Form bleibt Weiß AWT, Swing, JavaFX & SWT 7
L Schöne Ausgabe in Form einer Liste AWT, Swing, JavaFX & SWT 5
D 2D-Grafik Form der GrafikObjekte ändern, Ellipse -> Rectangle AWT, Swing, JavaFX & SWT 2
F Fenster in Form eines Sechseck AWT, Swing, JavaFX & SWT 6
D Drucken eines "Formulars" in abgeänderter Form AWT, Swing, JavaFX & SWT 5
E SWT und Separierung von Logik, Präsentation sowie Modell (also eine Form von MVC) AWT, Swing, JavaFX & SWT 10
S import von Klassen (zwei Panels eine Form) AWT, Swing, JavaFX & SWT 39
R JLayeredPane - JPanel mit variabler Form AWT, Swing, JavaFX & SWT 4
T SWT/Eclipse Form Controls zur Laufzeit hinzufügen,GridLayout AWT, Swing, JavaFX & SWT 4
G Components form AWT, Swing, JavaFX & SWT 3
M Form als abstrakte Klasse AWT, Swing, JavaFX & SWT 3
U Anwendung nicht beenden beim form schliessen? AWT, Swing, JavaFX & SWT 6
G JPanel in Form einer Sprechblase AWT, Swing, JavaFX & SWT 4
R Component einer Form herausbekommen AWT, Swing, JavaFX & SWT 3
I Tabelle in "Excel" Form AWT, Swing, JavaFX & SWT 5
F Form eines Buttons ändern AWT, Swing, JavaFX & SWT 10
F Parameter aus HTML-Form in Java-App per Post an PHP Script s AWT, Swing, JavaFX & SWT 2
H Die Form eines JButton ändern AWT, Swing, JavaFX & SWT 4
N jframe form ändern AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen

Neue Themen


Oben