如何在JavaFX 2中自動換行ListView(多行時,文本太長)?我知道,如果我將\ n放在字符串中,它將是多行,但內容太動態。或者在每個'xyz'像素長度之後有\ n將字符串\ n放入字符串的好方法。自動換行JavaFX 2 ListView
謝謝!
如何在JavaFX 2中自動換行ListView(多行時,文本太長)?我知道,如果我將\ n放在字符串中,它將是多行,但內容太動態。或者在每個'xyz'像素長度之後有\ n將字符串\ n放入字符串的好方法。自動換行JavaFX 2 ListView
謝謝!
您可以將TextArea放在ListCell.graphicProperty()中。這通常用於在列表單元格中設置圖標,但可以很容易地設置爲任何節點子類。
下面是我最終做出的確切代碼。
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;
}
});
我發現這段代碼在JavaFX8中產生了意想不到的行爲。稍微修改'if(!isEmpty)'爲'if(empty || item == null)'適用於這個版本。 – boatSoap
您也可以撥打[setEditable(假)(http://docs.oracle.com/javafx/2/api/javafx/scene/control/TextInputControl.html#setEditable%28boolean%29)上'TextArea'只在需要時才能讀取。 – jewelsea
感謝它的工作! –