'da bir liste görünümünde seçilen öğeye göre bir sınıf aramak ListView'im var ve seçim her değiştiğinde, o isimle bir sınıfı çağırmak istiyorum. Örneğin, öğeye "Metin Dizesi" denirse, TextString sınıfı çağrılmalıdır. Şu anda sahip olduğum kod bana The method insert(ArrayList<Element>) is undefined for the type Object
diyerek bir hata veriyor ... Eclipse bana nesneyi Element olarak yayınlamak için bir öneri veriyor, ancak bu hiçbir şey yapmıyor. Öğe sınıfı bir üst sınıftır ve TextString bu sınıfı uygular. İşte javafx
elementList.itemsProperty().bind(listProperty);
listProperty.set(FXCollections.observableArrayList(elementListItems));
elementList.setOnMouseClicked(new EventHandler<MouseEvent>() {
public String selectedElement = "Text String";
@Override
public void handle(MouseEvent event) {
selectedElement = (String)elementList.getSelectionModel().getSelectedItem();
selectedElement = selectedElement.replace(" ", "");
Class<?> clazz;
try {
clazz = Class.forName("elements."+selectedElement);
Constructor<?> ctor = clazz.getConstructor();
Object object = ctor.newInstance();
Method meth = clazz.getClass().getMethod("insert", new Class<?>[] { Canvas.class, ArrayList.class, GraphicsContext.class });
meth.invoke(object, canvas, objects, gc);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
});
Element.java
public abstract class Element {
public String name;
public String description;
public Canvas canvas;
public ArrayList<Element> objects;
public GraphicsContext gc;
void remove(){
}
void toggle(){
}
void setBounds(int x, int y, int w, int h){
}
public abstract void insert(Canvas canvas, ArrayList<Element> objects, GraphicsContext gc);
}
TextString.java yapabilirim ne olursa olsun nesne nesneyi döküm nasıl
public class TextString extends Element {
private GraphicsContext gc;
TextString() {
super();
this.name = "Text String";
this.description = "A literal readable string of text.";
}
@Override
public void insert(Canvas canvas, ArrayList<Element> objects, GraphicsContext gc) {
this.gc = gc;
this.canvas = canvas;
this.objects = objects;
System.out.println("Text string created.");
}
}
liste görünümünde seçiliyor mu?
daha iyi olacağını farklı örneklerini oluşturur basitçe anahtar sağlanan dizgeye bağlı sınıflar. – FilipRistic
Eh, sonunda benim app uzatılabilir hale getirmeyi umuyoruz ... anlam kullanıcıların yerel bir AppData klasörüne özel eleman sınıfları eklemek için izin. Anahtar ifadeleri kullanmak buna izin vermez. Artı ben app ile dahil birçok farklı unsurları üzerinde yapmayı planlıyoruz ve bu cehennem gibi dağınık olurdu. – ShoeLace1291
Bu hatayı tam olarak nereden alıyorsunuz? Insert() 'için açık bir çağrı göremiyorum. – shmosel