2012-12-13 107 views
2

如何在JavaFX 2中自動換行ListView(多行時,文本太長)?我知道,如果我將\ n放在字符串中,它將是多行,但內容太動態。或者在每個'xyz'像素長度之後有\ n將字符串\ n放入字符串的好方法。自動換行JavaFX 2 ListView

謝謝!

回答

4

您可以將TextArea放在ListCell.graphicProperty()中。這通常用於在列表單元格中設置圖標,但可以很容易地設置爲任何節點子類。

+1

您也可以撥打[setEditable(假)(http://docs.oracle.com/javafx/2/api/javafx/scene/control/TextInputControl.html#setEditable%28boolean%29)上'TextArea'只在需要時才能讀取。 – jewelsea

+0

感謝它的工作! –

3

下面是我最終做出的確切代碼。

ListView<String> messages = new ListView<>(); 
    messages.relocate(10, 210); 
    messages.setPrefSize(this.getPrefWidth() - 20, this.getPrefHeight() - 250); 
    messages.setCellFactory(new Callback<ListView<String>, ListCell<String>>() { 
     @Override 
     public ListCell<String> call(ListView<String> list) { 
      final ListCell cell = new ListCell() { 
       private Text text; 

       @Override 
       public void updateItem(Object item, boolean empty) { 
        super.updateItem(item, empty); 
        if (!isEmpty()) { 
         text = new Text(item.toString()); 
         text.setWrappingWidth(messages.getPrefWidth()); 
         setGraphic(text); 
        } 
       } 
      }; 

      return cell; 
     } 
    }); 
+0

我發現這段代碼在JavaFX8中產生了意想不到的行爲。稍微修改'if(!isEmpty)'爲'if(empty || item == null)'適用於這個版本。 – boatSoap