Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Problem mit der JList

Empfohlene Antworten

Veröffentlicht

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.

  • Autor

@ 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?

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.