我在VBox
(這是ScrollPane
的內容)中有一個TextFlow
對象,並且如果超過VBox(pref)寬度,我需要將其包裝。
我嘗試設置流的最大寬度:在VBox中包裹TextFlow
flow.maxWidthProperty().bind(vbox.prefWidthProperty());
但它不換行。我該怎麼做?提前致謝。
我在VBox
(這是ScrollPane
的內容)中有一個TextFlow
對象,並且如果超過VBox(pref)寬度,我需要將其包裝。
我嘗試設置流的最大寬度:在VBox中包裹TextFlow
flow.maxWidthProperty().bind(vbox.prefWidthProperty());
但它不換行。我該怎麼做?提前致謝。
默認情況下,滾動窗格將允許其內容增長到其首選大小,允許用戶滾動,如果它變得比分配的空間大。在你的情況下,作爲滾動窗格內容的VBox
的首選寬度計算爲其子節點的首選寬度;這當然是文本流的首選寬度。反過來,文本流的首選寬度計算爲顯示其文本而不包裝所需的寬度。
聽起來好像你要做的是限制VBox
,使它不能比包含它的滾動窗格更寬。您可以通過在滾動窗格上調用setFitToWidth(true);
來完成此操作。這會導致滾動窗格的內容被調整大小,使其寬度等於滾動窗格視口的寬度,只要該內容的範圍在內容的minWidth
-maxWidth
之間。
這裏是一個SSCCE:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.ScrollPane;
import javafx.scene.layout.VBox;
import javafx.scene.text.Text;
import javafx.scene.text.TextFlow;
import javafx.stage.Stage;
public class TextFlowInScrollPane extends Application {
@Override
public void start(Stage primaryStage) {
TextFlow flow = new TextFlow(new Text(text));
VBox vbox = new VBox(flow);
ScrollPane scrollPane = new ScrollPane(vbox);
// removing this line will allow the scroll pane to grow
// to an unlimited width, and so will prevent the text from
// wrapping:
scrollPane.setFitToWidth(true);
Scene scene = new Scene(scrollPane, 400, 400);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
private final String text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. "
+ "Duis malesuada nisi non est varius convallis. Donec eu aliquam tellus. "
+ "Duis nulla nulla, mattis non dictum non, bibendum vel eros. "
+ "Cras auctor metus eros, quis porta nisi mattis at. "
+ "Aenean bibendum, elit nec suscipit imperdiet, lorem mauris cursus felis, "
+ "sed suscipit quam nibh faucibus dui. Ut vel condimentum enim. "
+ "Curabitur non lacinia nunc. Quisque ut arcu turpis. Maecenas enim risus, "
+ "cursus eget auctor at, volutpat condimentum ligula. "
+ "Aliquam rutrum consectetur sapien, non imperdiet nisi auctor quis. "
+ "In hac habitasse platea dictumst. Nulla eget lacus ac quam dignissim varius. "
+ "In hac habitasse platea dictumst. Proin quis pellentesque eros, nec semper nibh."
+ "Integer venenatis aliquam risus volutpat tempor. Aliquam erat volutpat. "
+ "Proin at viverra turpis. Sed luctus purus tortor, ut molestie libero tempus quis. "
+ "Nulla eu viverra nulla. Vivamus ut bibendum lectus, eu lobortis tellus. "
+ "Aliquam pellentesque ipsum ipsum. Sed vel pellentesque sapien, ut egestas arcu. "
+ "Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. "
+ "Curabitur sodales felis at justo congue pharetra. "
+ "Curabitur sodales, urna a pulvinar consectetur, urna dolor rhoncus turpis, vel dapibus neque nisl a leo. "
+ "Maecenas feugiat consequat tortor fermentum molestie. Donec a est et risus porttitor ornare. "
+ "Cras auctor metus sed maximus fringilla. Donec blandit augue eu orci elementum malesuada. "
+ "Aliquam volutpat, enim at lacinia sollicitudin, nibh nisi dignissim erat, "
+ "sit amet accumsan orci lorem vitae nibh."
+ "Maecenas interdum finibus laoreet. Mauris iaculis nibh nec dui lacinia, ut lacinia est venenatis. "
+ "Donec vitae varius eros. Phasellus scelerisque eu risus ac bibendum. "
+ "Morbi luctus, diam ut vehicula tristique, lacus mi ornare lacus, nec hendrerit nulla metus vitae mauris. "
+ "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas mattis luctus nisl non volutpat. "
+ "Aenean euismod tristique libero sit amet dictum. Nulla facilisi. Aenean posuere dapibus convallis."
+ "In vulputate mi quam, ut mattis felis iaculis sed. Phasellus eleifend nunc ex, "
+ "vel commodo diam dictum at. Quisque posuere arcu ut lectus bibendum, non dapibus turpis luctus. "
+ "Nullam quis arcu elit. In convallis rutrum nulla nec feugiat. Curabitur dapibus accumsan quam, "
+ "ut faucibus orci posuere rhoncus. Integer vestibulum ex vitae sem elementum, a laoreet odio porta. "
+ "Suspendisse malesuada cursus euismod. Duis a arcu erat. Integer eu nisi quis lectus convallis suscipit."
+ "Pellentesque iaculis leo at dolor accumsan, nec fermentum urna maximus. "
+ "Aenean ornare congue nisi, nec placerat ipsum. Morbi et pharetra turpis, vel accumsan lorem. "
+ "Aenean tempus maximus velit, sed rutrum purus condimentum nec. Nunc sed aliquet turpis, ac aliquam justo. "
+ "Curabitur lectus urna, facilisis ac sapien vel, lacinia pulvinar mauris. "
+ "Cras venenatis, sapien maximus tincidunt luctus, lectus est auctor leo, id facilisis dui ex a ipsum. "
+ "Duis a urna sed purus semper maximus accumsan non mi. "
+ "Phasellus pharetra tempus sapien, in congue nisi ornare sed. "
+ "Sed mollis, velit eu eleifend elementum, nisi lacus venenatis erat, "
+ "pellentesque pulvinar augue diam eu ex. Maecenas non lacus mauris."
+ "Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. "
+ "Nam maximus eros urna. Vestibulum tempus condimentum nunc sit amet laoreet.";
}
它仍然沒有換行,它在到達窗格的末尾時只是「剪輯」。我使用'vbox.getChildren()。add(flow);' –
@GioG添加流程。不,它不。看截圖。你運行我的例子嗎? –
對不起,我的意思是「包裝」。問題在於流程是在稍後創建的,而不是在@GioG的開始 –
下面應該將文本包裝到下一行。
TextFlow tf = new TextFlow();
tf.setStyle("-fx-wrap-text: true");
它沒有。也許我應該編輯這些框? –
'TextFlow'不是'Labeled',因此不知道'-fx-wrap-text'。如果是這樣,那麼使用'tf.setWrapText(true)'''''''會比較安全,因爲當有替代選項時避免使用'.setStyle()'總是最好的。 – glglgl
你的問題是模糊的。你在VBox裏面有ScrollPane嗎?反之亦然。 TextFlow本身沒有wrap屬性,那麼「包裝TextFlow」是什麼意思? – ItachiUchiha
發佈[MCVE]。如果'VBox'在'ScrollPane'內,'VBox'將隨着它的增長而增長,所以'TextFlow'也會增長。目前還不清楚你想要做什麼。 –
抱歉誤會。由Label組成的TextFlow位於VBox內部,即ScrollPane的內容。如果流量達到VBox寬度,我需要換新線。 @James_D –