JList Spalte ausblenden

Alles was mit Swing und AWT zu tun hat

Moderatoren: wegus, Olek77

Antworten
Pete2016
Beiträge: 1
Registriert: 22.07.2016, 16:24

JList Spalte ausblenden

Beitrag von Pete2016 » 24.07.2016, 00:19

Heyho an alle und erstmals Grüße von mir.

Ich habe ein ähnliches Problem und komme einfach nicht weiter. Habe diese Klasse erstellt:

Code: Alles auswählen


package herbarium;

public class data_pflanze {
    
    
    private int pflanze_id;
    private String pflanze_name;

        public data_pflanze()
        {

        }

        public data_pflanze(int pflanze_id,String pflanze_name)
        {
            this.pflanze_id = pflanze_id;
            this.pflanze_name = pflanze_name;

        }
    
    
    public int getPflanze_id() {
        return pflanze_id;
    }

    public void setPflanze_id(int pflanze_id) {
        this.pflanze_id = pflanze_id;
    }

    public String getPflanze_name() {
        return pflanze_name;
    }

    public void setPflanze_name(String pflanze_name) {
        this.pflanze_name = pflanze_name;
    }
   
    @Override
    public String toString()
     { 
    return getPflanze_name(); 
     }

}

und versuche in dieser Klasse die ID auszulesen:

Code: Alles auswählen


package herbarium;

import javax.swing.DefaultListModel;


public class Herb_gui extends javax.swing.JFrame {

    MySql_herb data = new MySql_herb();
    DefaultListModel model = new DefaultListModel();
    int id;

    public Herb_gui() 
    {
        initComponents();      
    }
    
    private void jb_refreshActionPerformed(java.awt.event.ActionEvent evt) {                                           

        model.clear();
        get_data();
        
    }                                          

    private void btn_addActionPerformed(java.awt.event.ActionEvent evt) {                                        
        
        data.Insert_plant(tf_insert_plant.getText());
         
    }                                       

    private void btn_changeActionPerformed(java.awt.event.ActionEvent evt) {                                           

        for(int i = 0; i <data.dp.size();i++)
        {
            if(jList1.getSelectedValue().equals(data.dp.get(i).getPflanze_id()))
            {
                id = data.dp.get(i).getPflanze_id();
            }
        }
        
        //Methode zum Ändern von Datensätzen 
        Change_plant( plant, id);

       }                                          

    private void btn_deleteActionPerformed(java.awt.event.ActionEvent evt) {                                           
                get_data();
    }                                          


    private void get_data()
    {  
        model.clear();
        data.all_data(); 
        for(int i = 0; i < data.dp.size(); i++)
        {
          model.addElement(data.dp.get(i));        
        }   
        jList1.setModel(model);
    }
}
Angezeigt werden soll nur der Name, da ich aber für MySql Selects usw. die ID brauche, soll er mir den Listselect als Variable Id speichern, damit ich damit weiterarbeiten kann.

Code: Alles auswählen

        for(int i = 0; i <data.dp.size();i++)
        {
            if(jList1.getSelectedValue().equals(data.dp.get(i).getPflanze_id()))
            {
                id = data.dp.get(i).getPflanze_id();
            }
        }
So kommt nur "Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: herbarium.data_pflanze cannot be cast to java.lang.String" raus. Im Model sind die Daten aber drin. Siehe Anhang. data.dp ist die Liste von der Containerklasse. Irgendwie muß ich den JList select mit der ID in der for Schleife vergleichen.

Code: Alles auswählen

id = ((data_pflanze)jList1.getSelectedValue()).getId();
Bei der oben genannten Lösung kommt immer "incompatible types: String cannot be converted to data_pflanze" raus.
Hat jemand eine Idee wie ich das lösen kann?
Mfg Pete
Dateianhänge
debug2.png
debug2.png (39.08 KiB) 4360 mal betrachtet

Benutzeravatar
nigjo
Beiträge: 632
Registriert: 08.09.2009, 09:43
Wohnort: Aachen
Kontaktdaten:

Re: JList Spalte ausblenden

Beitrag von nigjo » 26.07.2016, 13:46

Hi

"jList1.getSelectedValue()" liefert dir das Object, welches du in die JList hinein gepackt hat. Wenn du also "data_pflanze"-Instanzen in der Liste hast, wirst du auch genau selbiges dort zurück bekommen.

Vergleichen (mit "equals") kannst du grundsätzliche nur Instanzen vom gleichen Typ. Also Integer mit Integer, Double mit Double, String mit String, "data_pflanze" mit "data_pflanze" (wenn du die equals-Methode implementiert hast) aber keine Äpfel mit Birnen. Wenn du die ID vergleichen möchtest, musst du dir diese Information aus den vorhandenen Instanzen herausholen.

Du hast also entweder die Möglichkeit einfach die IDs der beiden Objekte zu vergleichen (mit dem entsprechenden gettern) oder du implementierst die equals() (und hasCode) Methoden.

ps: Den Anzeigetext von Objekten in einer JList steuerst du mit der toString()-Methode der Klassen. Aber das scheint ja korrekt zu sein.
Man sollte seine Werkzeuge kennen. Ansonsten haut man sich mit dem Hammer nur auf die Finger.

--
NetBeans Certified Engineer - Java Getriebe

Antworten