Alex_winf01 Geschrieben 19. Dezember 2007 Geschrieben 19. Dezember 2007 Ich habe folgende Liste: /*-------------------------------------------------------------------*/ /**J L i s t */ /*-------------------------------------------------------------------*/ String[] liste_array = {"nachname , ", "vorname,", "fall_nummer"}; liste = new JList(defaultlistmodel); liste.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); liste.setSelectedIndex(0); liste.setSize(50,50); liste.setSelectionMode(0); scrollPane = new JScrollPane(liste); Diese fülle ich mit Werten aus der Datenbank: /*-------------------------------------------------------------------*/ /**JList mit Werten aus der Datenbank auslesen*/ /*-------------------------------------------------------------------*/ try { // Anzeige neuer Datensätze in der Liste String anzeige_JList; for (;Login.result.next();defaultlistmodel.addElement(anzeige_JList)) { anzeige_JList = Login.result.getString("fall_nummer"); } pack(); } catch(SQLException e) { JOptionPane.showMessageDialog(null, " Fehler beim Datenbankabbau" + e, "DB-Meldung", JOptionPane.ERROR_MESSAGE); } Nun habe ich eine Schaltfläche, mit der ich erreichen will, dass nicht die fall_nummer, sondern der Name oder der Status aus der DB ausgelesen wird. Hier der ActionListener dazu: class listeSortierenListener implements ActionListener { public void actionPerformed(ActionEvent e) { String text = "Welches Kriterium soll in der Liste angezeigt werden?"; stringSort = ( String ) JOptionPane.showInputDialog(null, "Kriterium für Liste", "Dialog", JOptionPane.QUESTION_MESSAGE, new ImageIcon("img/middle.gif"), sortierung, sortierung[0]); if (stringSort == null) return; } } Die Variable sortierung ist wie folgt definiert: public static String[] sortierung = {"Fall-Nummer", "Name", "Status"}; Ich muss ja dann die JList z. B. mit dem hier überschreiben: /*-------------------------------------------------------------------*/ /**JList mit Werten aus der Datenbank auslesen*/ /*-------------------------------------------------------------------*/ try { // Anzeige neuer Datensätze in der Liste String anzeige_JList; for (;Login.result.next();defaultlistmodel.addElement(anzeige_JList)) { anzeige_JList = Login.result.getString("name"); } pack(); } catch(SQLException e) { JOptionPane.showMessageDialog(null, " Fehler beim Datenbankabbau" + e, "DB-Meldung", JOptionPane.ERROR_MESSAGE); } Nur mal angenommen, der Anwender klickt auf "Name". Nur leider tut sich da nix. Wer kann mir helfen? Und wenn es über ein kleines Beispiel ist. Zitieren
Jaraz Geschrieben 20. Dezember 2007 Geschrieben 20. Dezember 2007 Hi, wenn du Werte ändern möchtest, darfst du nicht mit einem Array arbeiten sondern mußt mit dem Interface ListModel arbeiten. Eine fertige Implementierung liefert dir die Klasse DefaultListModel. How to Use Lists (The Java™ Tutorials > Creating a GUI with JFC/Swing > Using Swing Components) Gruß Jaraz Zitieren
Alex_winf01 Geschrieben 21. Dezember 2007 Autor Geschrieben 21. Dezember 2007 @ Jaraz Danke schon mal für Deine Antwort. Ich habe festgestellt, dass ich das Array gar nicht verwende, sondern gleich über liste = new JList(defaultlistmodel); Habe das Problem jetzt anders gelöst. Man nehme eine Variable, die man als public deklarier (z. B. public static String kriterium;) Setze diese Standard-mäßig auf nummer und sobald der Anwender über die Schaltfläche "Neues Kriterium" klickt und ein Kriterium festlegt (z. B. Name) wird das in der Variablen kriterium gespeichert. Fertig. Funzt Nun habe ich nur noch ein "kleines" Problem: Ich habe da einen Handler für die Liste, der ja die Problematik lösen soll, wie die Liste reagieren soll. Derzeit sieht mein Listener so aus: /*------------------------------------------------------------*/ /* Handler für die JList*/ /*------------------------------------------------------------*/ class SelectionHandler implements ListSelectionListener { public void valueChanged(ListSelectionEvent e) { if (e.getSource() == liste) { // Methodenaufrufe, wie die Liste reagieren soll for (int i = 0; i< 100; i++) { String index = (String)liste.getSelectedValue(); if (liste.getSelectedIndex()==i) { /*------------------------------------------------*/ /* Daten auslesen*/ /*------------------------------------------------*/ String query_daten = "SELECT * FROM tabelle where nummer" + "=" + "'" + index + "'"; try { // Statement erzeugen Statement statement = Login.connection.createStatement(); // Query ausführen ResultSet result = statement.executeQuery(query_daten); //Daten einlesen und auf dem Bildschirm ausgeben while (result.next()) { if(patient_rs.getString(kriterium).equals(index)) { // Hier werden die Daten dann auf den Bildschirm gesetz (z. B. in ein Textfeld mit setText(); } } statement.close(); } catch(SQLException e2) { JOptionPane.showMessageDialog(null, "Fehler beim Auslesen" + e2, "DB-Meldung", JOptionPane.ERROR_MESSAGE); } Nun habe ich folgendes "Problem": Wie ich ja geschrieben habe, kann der Anwender einmal das Kriterium "Nummer" auswählen und einmal das Kriterium "Name". Das klappt mit einem Listener nicht. Wie kann ich dieses Problem lösen? Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.