2016-03-21 12 views
0

私はリーダーボードとしてlistviewを使用し、文字列で行われるプレーヤーの名前と合計スコアを表示しています。しかし、私はリストビューをカスタマイズして、位置と平均スコアも含めます。私はそれが欲しい方法について以下のスケッチを提供しました。今JavaFX - カスタムリストビューの外観

Sketch

、私が観察可能なリストにプレーンな文字列を追加し、リストビュー上でそれを見て、しかし、トラブルそれをカスタマイズを抱えています。私は実際にそれを行う方法がわからない、何が最善の方法ですか? CSSまたはjavafxを使用して?私はlistviewに関するいくつかの質問があるなど、テーブルビューのような静的ヘッダーを持つことは可能ですか?

UPDATE

私は、カスタムのHBoxセルを作成しようとしましたし、それを使ってみましたが、私が何か間違ったことを行っているようですしています。私はグリッドパネルを使ってテキストの位置を調整しようとしました。しかし、Listviewはこのように見えます。

私はこれで2人の選手を追加した(59ポイントでジョニーを、そして15ポイントとマイク) enter image description here

私はのlistcell (Link)の代わりのhboxが、私はこれを選んだ理由を使用している人々との例を見てきました私は、playerNameをtotalScoreで並べ替えた後に、playerName、totalScore &の平均を渡したいからです。したがって、リストビューでは、合計スコアの昇順でプレーヤーを表示できます。これを行うより良い方法がある場合は、共有してください。

コントローラクラス

グローバルフィールド:

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

UpdateListView()メソッド:

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クラス

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); 
    } 


} 

私が使用すると、リストセルは正常に動作します。しかし、それは私が欲しいものではありません。

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

結果:

enter image description here

+1

は、私だけでは、ラベルとリストビューを置きます静的ヘッダーを表示するラベル付きのvbox。表示のためには、いくつかのCSSに沿ってカスタムリストセルの実装が必要です(最も柔軟なアプローチ)。おそらくあなたはこれを試してより具体的な質問を投稿する必要があります。 –

+1

Oracle JavaFXのドキュメントを読んでください:[リスト・ビューのコンテンツをカスタマイズする](https://docs.oracle.com/javase/8/javafx/user-interface-tutorial/list-view.htm) – jewelsea

+0

@James_Dとjewelsea私はあなたのコメントの両方が完璧に良い答えだと思います。 – JohnRW

答えて