2016-04-01 16 views
2

için döküm yapılamıyor JavaFX'te bir GUI oluşturmaya çalışıyorum. Bazı verileri göstermek için kullanmak istediğim bir ListView var. Kullanmak istediğim iki tip olası veri seti var, onlara Arabalar ve Bisikletler diyelim. İlgili düğmeye bastığımda, ihtiyacım olan verileri yüklemek istiyorum. Şimdiye kadar benim denetleyicisi sınıf şuna benzer: düğmelerinden birine basıldığındaJavaFX: Gözlemlenebilir Listeler, ClassCastException: A B

import javafx.collections.FXCollections; 
import javafx.collections.ObservableList; 
import javafx.fxml.FXML; 
import javafx.scene.Scene; 
import javafx.scene.control.*; 
import javafx.util.Callback; 


import java.util.List; 

public class FXMLController { 
    @FXML 
    ListView lv_list; 
    @FXML 
    Button button_cars; 
    @FXML 
    Button button_bikes; 


    List<Cars> cList; 
    List<Bikes> bList; 
    Server serv; 

    private ObservableList observableList = FXCollections.observableArrayList(); 

    public void initScene szene) { 
     /* initializes serv so it properly yields data */ 
    } 


    public void listAllCars() { 
     cList = serv.getAllCars(); 
     updateCarList(); 
    } 

    private void updateCarList() { 
     observableList.setAll(cList); 
     lv_list.setItems(observableList); 
     lv_list.setCellFactory(new Callback<ListView<Cars>, ListCell<Cars>>() { 
      @Override 
      public ListCell<Cars> call(ListView<Cars> listView) { 
       return new ListViewElemCars(); // creates stuff to populate the list 
      } 
     }); 
    } 

    public void listAllBikes() { 
     bList = serv.getAllBikes(); 
     updateBikeList(); 
    } 

    private void updateBikeList() { 
     observableList.setAll(bList); 
     lv_list.setItems(observableList); 
     lv_list.setCellFactory(new Callback<ListView<Bikes>, ListCell<Bikes>>() { 
      @Override 
      public ListCell<Bikes> call (ListView<Bikes> listView) { 
       return new ListViewElemBikes(); //same as with cars 
      } 
     }); 
    } 
} 

listeleme yöntemleri olur. Yöntemler kendileri oldukça iyi çalışıyorlar - arabaların düğmelerine basarsam, tüm arabalar tahmin edildikleri şekilde ortaya çıkıyor. Aynı bisikletler için de geçerli.

Exception in thread "JavaFX Application Thread" java.lang.ClassCastException: Cars cannot be cast to Bikes 

Ben updateCarList/updateBikeList yöntemlerde kontrolsüz çağrılar nedeniyle sanırım, ama burada zararına gerçekten şeyler: Ancak, ne zaman aşağıdaki hatayı alıyorum, birbiri ardına basın deneyin. Bir şekilde bu şeyi bir ListView ile yapabilmek istiyorum, ama burada neyin yanlış olduğunu anlamıyorum. Burada neyi özlüyorum?

+0

Kural dışı durum hakkında daha fazla bilgi gönderebilir misiniz? Belki de tam yığınların bir çift satırı? –

cevap

1

Beton türlerini, cellFactory s tarafından döndürülen hücrelerde kullanırsınız. ListView, yeni öğe türü yeni türün bir öğeyi görüntülemesi amaçlanmayan bir hücreye eklendiğinde, ClassCastException sonucunu veren hücreleri yeniden kullanır.

Hatta şu yaklaşım çalışmak görünmüyor:

  1. Temizle items listesini
  2. değiştirin cellFactory
  3. Çağrısı refresh()
  4. yeni items

Bu araçlar ekle tüm ite idare eden hücreleri kullanmalısın m türleri veya ListView'un tamamını değiştirerek.

İlgili konular