2017-12-14 16 views
1

私はJavaFXを使用してチャットアプリケーションに取り組んでいます。私は接続されたユーザーを含むListViewを持っています。各セルはUserViewオブジェクトによって表される:JavaFX ListView:ListCellにラベルを追加できませんでした

public class UserView { 

    private Utilisateur user; //user 
    private String avatar;// user's avatar 
    private int numberofmessage = 0; //number of received messages. 

    public UserView(Utilisateur user, String avatar) { 
     this.user = user; 
     this.avatar = avatar; 
    } 

    public Utilisateur getUser() { 
     return user; 
    } 

    public void setUser(Utilisateur user) { 
     this.user = user; 
    } 


    public String getAvatar() { 
     return avatar; 
    } 

    public void setAvatar(String avatar) { 
     this.avatar = avatar; 
    } 

    public int getNumberofmessage() { 
     return numberofmessage; 
    } 

    public void setNumberofmessage(int numberofmessage) { 
     this.numberofmessage = numberofmessage; 
    } 

    public void InscrementMessages(int nbr){ 
     this.numberofmessage +=nbr; 
    } 


} 

私が受け取ったメッセージの数が含まれているLabelを追加します。

usersList.setCellFactory(new Callback<ListView<UserView>, ListCell<UserView>>() { 
      @Override 
      public ListCell<UserView> call(ListView<UserView> param) { 
       ListCell<UserView> cell = new ListCell<UserView>(){ 
        @Override 
        protected void updateItem(UserView item, boolean empty) { 
         super.updateItem(item, empty); 

         if(!empty){ 

          Image img = new Image("/images/"+item.getAvatar()); 
          ImageView imageView = new ImageView(img); 
          imageView.setFitHeight(65); 
          imageView.setFitWidth(65); 
          setGraphic(imageView); 
          setText(item.getUser().getNom()+" "+item.getUser().getPrenom()); 

          lblMsg = new Label(); 
          if(item.getNumberofmessage() == 0){ 
           lblMsg.setText(""); 
          } 
          else{ 
           lblMsg.setText(String.valueOf(item.getNumberofmessage())); 
           lblMsg.getStyleClass().clear(); 
           lblMsg.getStyleClass().add("newMsg"); 
          } 

          getChildren().add(lblMsg); 
         } 
        } 

       }; 
       return cell; 
      } 
     }); 

と私は10に、各ユーザのためのメッセージの数を設定し、テストのために:

for (Utilisateur user : users) { 
    if(!Helper.getInstance().getCurrentUser().equals(user)){ 
     UserView uv = new UserView(user, "man.png"); 
     uv.setNumberofmessage(10); 
     connectedUser.add(uv); 
     listConv.add(new UserConversation(uv)); 
    }  
} 

これが結果です:

enter image description here

+0

リストセルは実際には親ではなく、その子をレイアウトする明確な方法を持っていません。セルのテキストに直接量を設定するか、スタックペインのグラフィックスを設定してそこにあるすべてのロジックを実行します(イメージビューとラベルを追加します)。 – Mordechai

答えて

1

私がやったことだ の有効な使用方法ではないを使用してLabelを追加しようとしています0(またはその親のLabeled)。 NodeをセルのgraphicPropertyに設定する必要があります。複数のノードを表示する場合は、コンテナノード(Parent)をグラフィックとして設定してこのノードにノードを追加できます。

HBox root = new HBox(5); 
root.getChildren().addAll(imageView, lblMsg); 
setGraphic(root); 

それとも、テキストにユーザー数を追加することができます:

これを知りながら、そこにいくつかの可能な修正が可能であり、CSSが失われます。これにより

setText(item.getUser().getNom()+" "+item.getUser().getPrenom() + " " + item.getNumberofmessage()); 

lblMsg )ので、あなたのニーズに合わせて、2つのLabelを使用することが最善の方法です:

これらのすべてのソートについては、コード内のいくつかの行を削除する必要がありますが、これを行うのは簡単です。この部分については詳しく説明しません。

+0

ありがとう、私が言及した3番目のソリューションを使用し、それはうまく動作します。 ちょっと別の質問:ラベルをセルの左に揃える方法を教えてください。 –

+0

'root .setAlignment(Pos.CENTER_LEFT);'は、HBox全体を水平方向に垂直方向の中央に揃えます。 – DVarga

関連する問題