Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Hallo,
ich habe eine Frage zur Implementierung eines AbstractListModels, die sich aber auch auf jede andere Art von Implementierung beziehen könnte. Ich scheine da wohl auch ein kleines Verständnisproblem zu haben.
Code:
import java.awt.Component;
import javax.swing.AbstractListModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;
public class ListModel extends JFrame{
static JButton jButton1 = new JButton("Button");
static JTextField jTextField1 = new JTextField("Textfeld");
ListModel(){
AbstractListModel AbstractListModel1 = new AbstractListModel() {
Component[] ListContent = {jButton1,jTextField1};
public int getSize() {
return ListContent.length;
}
public Component getElementAt(int index) {
return ListContent[index];
}
};
}
}
Warum kann ich in diesem Beispiel nicht auf die getElementAt(int index)-Methode zugreifen, die ich definiert habe? Wenn man
Code:
AbstractListModel1.
eingibt zeigt die IDE ja die verfügbaren Methoden an. Es wird dann allerdings nur getElementAt(int index) mit einem Rückgabewert vom Typ Object angezeigt. Wie kann ich die getElementAt(int index)-Methode mit dem Rückgabewert Component verwenden?
Wäre super, wenn mir da jemand weiterhelfen könnte.
Leider gar nicht. AbstractListModel definiert die Methode als public Object getElementAt(int index). Da deine Variable AbstractListModel1 (Tipp: Variablen immer klein schreiben) den Typ AbstractListModel hat, geht der Compiler von genau diesem Typ aus (auch wenn seit Java 1.5 covariante Rückgabewerte - wie in deinem Fall Component - erlaubt sind). Eine Lösungsmöglichkeit wäre, statt einer anonymen Klasse eine innere Klasse zu verwenden:
Code:
public class ListModel extends JFrame{
static JButton jButton1 = new JButton("Button");
static JTextField jTextField1 = new JTextField("Textfeld");
ListModel(){
MyListModel myListModel = new MyListModel();
Component c = myListModel.getElementAt(0);
}
private class MyListModel extends AbstractListModel() {
Component[] listContent = {jButton1,jTextField1};
public int getSize() {
return listContent.length;
}
public Component getElementAt(int index) {
return listContent[index];
}
}
}