Methode mit variablem Rückgabewert

tigger7985

Grünschnabel
Schönen guten Morgen,

ich habe eine Methode erstellt die einen Dialog öffnet, in dem man einen Wert aus einer Liste auswählen kann. Dazu übergebe ich das jeweilige ListModel<T> mit den entsprechenden Objekten.

Code:
    public static T listenAuswahl(DefaultListModel<T> listmodel,
            String titel,
            String msg) {

        JList<T> liste = new JList<T>(listmodel);
        JScrollPane listpane = new JScrollPane(liste);

        JPanel panel = new JPanel(new BorderLayout());
        panel.add(new JLabel(msg), BorderLayout.NORTH);
        panel.add(listpane, BorderLayout.CENTER);

        JOptionPane.showMessageDialog(null, panel, titel,
                JOptionPane.PLAIN_MESSAGE);

        return liste.getSelectedValue();
    }

Gibt es eine Möglichkeit direkt ein Objekt der Liste zurückzugeben?
Oder muss ich alles auf <object> ändern und dann jeweils den zurückgegebenen Wert parsen?

Edit:
Ich hab übersehen es ins richtige Unterforum zu posten, wie kann ich das nachholen?
 
Zuletzt bearbeitet:
Hi

du gibst doch ein Objekt aus der Liste zurück, also was ist das Problem?

Zum Unterforum: Finde, dass das schon so passt.
Wenn du willst verschieb ich, aber wohin?
 
Wenn ich eine ListModel<Auto> übergebe will ich ein Auto zurück
und wenn ich ein ListModel<Person> übergebe eine Person zurück

im Moment muss ich meinen Rückgabewert dann jeweils nochmal parsen also:
Auto a = (Auto) listenAuswahl( model, ...); oder
Person p = (Person) listenAuswahl(...);
Die Frage ist ob es eine Möglichkeit gibt mir das zu sparen, weil ich direkt das Auto oder die Person bekommen kann.

Zum Unterforum: ich dachte an
Algorithmen & Datenstrukturen mit Java
aber wenn du meinst das es passt, wäre es auch egal
 
Wenn du das getSelectedValue() meinst, dann teste mal, ob das funktioniert

Java:
        return (T)liste.getSelectedValue();
    }
 
Bei mir funktioniert folgender Code:

Java:
import java.awt.BorderLayout;

import javax.swing.DefaultListModel;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

public class test_listmodel {
    public static void main(String []args){
        DefaultListModel<Auto> listmodel = new DefaultListModel<Auto>();
        Auto auto = new Auto("Audi");
        listmodel.addElement(auto);
        Auto test = test(listmodel);
        System.out.println(test);
        DefaultListModel<WasAnderes> listmodel2 = new DefaultListModel<WasAnderes>();
        WasAnderes wa = new WasAnderes("Blub");
        listmodel2.addElement(wa);
        WasAnderes blub = test(listmodel2);
        System.out.println(blub);
    }
    private static <T> T test(DefaultListModel<T> listmodel){
          JList<T> liste = new JList<T>(listmodel);
          JScrollPane listpane = new JScrollPane(liste);

          JPanel panel = new JPanel(new BorderLayout());
          panel.add(new JLabel("asdf"), BorderLayout.NORTH);
          panel.add(listpane, BorderLayout.CENTER);

          JOptionPane.showMessageDialog(null, panel, "test",
                  JOptionPane.PLAIN_MESSAGE);
        
          return liste.getSelectedValue();
        
      }
}

Objekte ganz simple:
Java:
public class Auto {
    private String Marke;

    public Auto(String Marke){
        this.Marke = Marke;
    }
    public String getMarke() {
        return Marke;
    }

    public void setMarke(String marke) {
        Marke = marke;
    }
    public String toString(){
        return Marke;
    }

}

Java:
public class WasAnderes {
    private String bla;

    public WasAnderes(String bla){
        this.bla = bla;
    }
    public String getBla() {
        return bla;
    }

    public void setBla(String bla) {
        this.bla = bla;
    }
    public String toString(){
        return bla;
    }
}

Wenn du bei der Erstellung dich darauf festlegst welchen Typ die Liste haben soll funktioniert das mit dem Rückgabewert.

Viele Grüße
Youza
 
Vielen Dank,
mit hat nur das <T> im Methodenkopf gefehlt dann klappt es auch direkt mit meiner.
Ohne das kann man nicht mal kompilieren.
 
Zurück