2016-03-21 29 views
0

Liste görünümünü bir sıralama tablosu olarak kullanıyorum ve bir dizeyle yapılan oyuncu adını ve toplam puanı görüntüliyorum. Ama liste görünümünü özelleştirmek istiyorum, bu yüzden pozisyon ve ortalama skoru da içerir. Nasıl olmasını istediğim hakkında bir taslak hazırladım.JavaFX - Özel Liste Görünümü Görünüm

Sketch

Şu anda, gözlemlenebilir listesine bir düz dize ekleme ve liste görünümü üzerinde görüntüleyen, ancak sorun özelleştirmeye yaşıyorum. Bunu nasıl yapacağımı bilmiyorum, en iyi yol nedir? css veya javafx kullanarak? Tablo görünümü gibi statik bir başlığa sahip olmanın mümkün olması gibi liste görünümü ile ilgili bazı sorularım var mı?

GÜNCELLEME

Özel bir HBox hücre oluşturmak için çalıştık ve kullanmaya çalıştı, ama ben yanlış bir şey yapmış gibi görünüyor var. Metin konumlarını ayarlamak için bir gridpane kullanmayı denedim. Fakat Liste Görünümü böyle görünüyor.

Bunu seçtim listcell yerine HBox ait (Link) ama nedenini kullanan kişilerle örnekler I (59 puanla Jonny ve Mike 15 sayıyla) bu iki oyuncu ekledik enter image description here

gördüğüm

şekilde, playerStats dizilimimi totalScore ile sıraladıktan sonra, playerName, totalScore & değerini geçmek istiyorum. Böylece liste görünümü, oyuncuları toplam puanlarının artan düzeninde görüntüleyebilir. Bunu yapmanın daha iyi bir yolu varsa lütfen paylaşın.

Kontrolör Sınıf

Küresel alanları:

ListView<CustomCellHBox> leaderBoard = new ListView<CustomCellHBox>(); 
ObservableList<CustomCellHBox> rank = FXCollections.observableArrayList(); 

UpdateListView() Yöntem:

public void updateListView() { 
     rank.clear(); 

     List<CustomCellHBox> data = new ArrayList<CustomCellHBox>(); 

     for(Statistics s : playerStats){ 
      data.add(new CustomCellHBox(s.getPlayer(),s.getTotalScore(),s.getAverage())); 
     } 

     rank = FXCollections.observableArrayList(data); 
     leaderBoard.setItems(rank); 
} 

CustomCellHBox Sınıf

public class CustomCellHBox extends HBox { 


    private Label playerName = new Label(); 
    private Label totalScore = new Label(); 
    private Label averageScore = new Label(); 
    private GridPane grid = new GridPane(); 

    CustomCellHBox(String playerName, int totalScore, double averageScore) { 
     super(); 

     this.playerName.setText(playerName); 
     this.totalScore.setText(String.valueOf(totalScore)); 
     this.averageScore.setText(String.valueOf(averageScore)); 

     grid.setHgap(10); 
     grid.setVgap(4); 
     this.playerName.setMaxWidth(Double.MAX_VALUE); 
     this.averageScore.setMaxWidth(Double.MAX_VALUE); 
     this.totalScore.setMaxWidth(Double.MAX_VALUE); 


     grid.add(this.playerName,0,0); 
     grid.add(this.totalScore,0,1); 
     grid.add(this.averageScore,0,2); 
     this.setHgrow(grid,Priority.ALWAYS); 

     this.getChildren().addAll(grid); 
    } 


} 

Ben kullandığımda liste hücresi iyi çalışıyor. Ama istediğim tam olarak değil.

grid.add(this.playerName,0,0); 
     grid.add(this.totalScore,1,0); 
     grid.add(this.averageScore,2,0); 

Sonuç:

enter image description here

+1

, ben sadece bir bir etiket ve liste görünümü koyardı Vbox, statik üstbilgiyi görüntüleyen etiketle. Ekran için, bazı CSS ile birlikte (en esnek yaklaşım için) özel bir liste hücresi uygulamasına ihtiyacınız olacak. Muhtemelen bunu denemek ve daha spesifik bir soru göndermek gerekir. –

+1

Oracle JavaFX belgelerini okuyun: [Liste Görünümü İçeriğini Özelleştirme] (https://docs.oracle.com/javase/8/javafx/user-interface-tutorial/list-view.htm) – jewelsea

+0

@James_D ve jewelsea Her iki yorum da mükemmel cevaplar. – JohnRW

cevap

İlgili konular