Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Ich habe eine JList, die auf eine Schaltfläche reagiert:

/*-------------------------------------------------------------------*/

      /**J L i s t */

      /*-------------------------------------------------------------------*/

      String[] liste_dokumentationen_s = {"anzahl_dokumentationen", "fall_nummer"};

      liste_dokumentation = new JList(defaultlistmodel_weitereDokumentationen);

      liste_dokumentation.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

      liste_dokumentation.setSelectedIndex(0);

      liste_dokumentation.setSize(50,50);

      liste_dokumentation.setSelectionMode(0);

      doku_scrollPane = new JScrollPane(liste_dokumentation);

      doku_scrollPane.setViewportView(liste_dokumentation);


      /*-------------------------------------------------------------------*/

      /**JList mit Werten aus der Datenbank auslesen*/

      /*-------------------------------------------------------------------*/

      int a = Fragebogen.patienten_liste.getSelectedIndex();

      String b = Fragebogen.fall_nummer_text.getText();

      try

      {   

         String query_wDoku = "SELECT * FROM dokumentation where dokumentation_fall_nummer = " + "'" + b + "'";

         // Statement erzeugen

         Statement wDoku_st = Login.connection.createStatement();


         // Query ausführen

         ResultSet wDoku_rs = wDoku_st.executeQuery(query_wDoku);


         //Daten einlesen und auf dem Bildschirm ausgeben

         while (wDoku_rs.next())

         {

            String anzeige_anzahl_dokumentation_JList;

            anzeige_anzahl_dokumentation_JList = wDoku_rs.getString("anzahl_dokumentation");

            defaultlistmodel_weitereDokumentationen.addElement(anzeige_anzahl_dokumentation_JList);

         }

         wDoku_st.close();

      }

      catch(SQLException d1)

      {

         JOptionPane.showMessageDialog(null, " Fehler beim Datenbankabbau " + d1,

         "DB-Meldung", JOptionPane.ERROR_MESSAGE);

       }

      liste_dokumentation.addListSelectionListener(new SelectionHandler3());

      cp.add(doku_scrollPane);

Klick ich auf die Schaltfläche, werden die Ergebnis der Abfrage dort angezeigt. So weit so gut. Klicke ich ein zweites Mal auf die Schaltfläche, werden die Ergebnisse des 1. Klicks mit angezeigt. Wie kann ich das verhindern? Es soll ja nur die Ergebnisse des aktuellen Klicks angezeigt werden.

Geschrieben

@ _Arvid_

Vielen Dank für Deine schnelle Antwort. Ich habe da noch zwei weitere Probleme mit JList:

1. Problem

Ich füttere meine JList mit Werten aus der DB. Ich habe eine Schaltfläche "Neues Kriterium festlegen", mit dem der Anwender entscheiden kann, ob in der Liste Nummern oder der Name angezeigt werden soll.

Der Handler sieht wie folgt aus:

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]);


            String stringSortWert = stringSort;

            if (stringSortWert.equals("Name"))

            {

               kriterium = "nachname";

               liste.updateUI();

               scrollPane.setViewportView(liste);

               try

                {

                   String lese_nachname = "Select * from anwender";

                  Statement stmt_nachname = Login.connection.createStatement();

                  ResultSet result_nachname = stmt_nachname.executeQuery(lese_nachname.toString());

                   // Anzeige neuer DS in der Liste

                   for (;result_nachname.next();defaultlistmodel.addElement(anzeige_JList))

                   {

                      anzeige_JList = result_nachname.getString(kriterium);

                   }

                   pack();

                   stmt_nachname.close();


                 }


                catch(SQLException a)

                {

                   JOptionPane.showMessageDialog(null, " Fehler beim Datenbankabbau" + e,

                  "DB-Meldung", JOptionPane.ERROR_MESSAGE);

                }

                liste.addListSelectionListener(new SelectionHandler_Nachname());

            }


            if (stringSortWert.equals("Fall-Nummer"));

            {

               kriterium = "fall_nummer";

               liste.updateUI();

               scrollPane.setViewportView(liste);

               try

               {

                  String lese_fallnummer = "Select * from anwender";

                  Statement stmt_fallnummer = Login.connection.createStatement();

                  ResultSet result_fallnummer = stmt_fallnummer.executeQuery(lese_fallnummer.toString());

                   // Anzeige neuer DS in der Liste

                   for (;result_fallnummer.next();defaultlistmodel.addElement(anzeige_JList))

                   {

                      anzeige_JList = result_fallnummer.getString(kriterium);

                   }

                   pack();

                   stmt_fallnummer.close();

                 }


                catch(SQLException a)

                {

                   JOptionPane.showMessageDialog(null, " Fehler beim Datenbankabbau" + e,

                  "DB-Meldung", JOptionPane.ERROR_MESSAGE);

                }

                liste.addListSelectionListener(new SelectionHandler_FallNummer());

            }

                         }

                    }

2. Problem:

Wähle ich den Punkt "Fall-Nummer" aus, werden auch nur die Fall-Nummern angezeigt. Wähle ich den Punkt "Nachname" aus, werden mir die Nachnamen + die Fallnummern angezeigt. Wie kann ich das verhindern?

3. Problem:

Wenn ich diese Schaltfläche benutze und zwischen Fall-Nummer und Nachname wähle, verschwindet nach Aktualisierung der JList ein Teil der GUI. Schließe ich das Fenster und öffne es wieder ganz normal, wird mir das GUI wieder richtig angezeigt. Wie kann ich das vermeiden?

Geschrieben

Also zunächst einmal hättest du die Fallunterscheidung so gut wie gar nicht benötigt. Bei den beiden Teilen mit Fall-Nummer und Namen machst du im Grunde das Gleiche (fast jedenfalls). Hier kannst du also etwas zusammenfassen und dadurch einige Codezeilen sparen.

Des Weiteren fiel mir auf, dass du der Liste jedes Mal einen neu erzeugten ListSelectionListener anhängst, wenn ein Kriterium vom Benutzer gewählt wird. Das ist wohl eher suboptimal. Die Listener jeweils einmal zu adden, sollte wohl reichen. :)

Bereinige deinen Code entsprechend etwas. Vielleicht ergibt sich das eine oder andere Problem dabei von selbst. Auf jeden Fall wird es wieder ein Stück übersichtlicher und möglicherweise findest du dann die Fehlerursachen selbst.

Anderenfalls melde dich nochmal. =)

Zudem verstehe ich die Schilderung des dritten Problems nicht so recht. Klingt nach fehlendem Repaint. :confused:

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...