Я строю приложение для преобразования текста в текст.Я использую разделенную панель для отображения.Левая панель отображает динамически изменяющуюся речь в текстовую информацию.Правая панель отображает фиксированный текст «да / нет» для каждого предложения, произнесенного на левой панели того же уровня.
Чтобы убедиться, что «Да / Нет» отображается на том же уровне, что и предложение на левой панели, я добавляю текст на левой и правой панелях в соответствующие Hbox (Splitpane_left_hbox (Речь к тексту)и Splitpane_right_hbox («Да / Нет»)) всякий раз, когда произносится новое предложение.
Левый и правый боксы помещаются в left_Vbox и right_vbox для вертикальной визуализации речи в текстовые предложения.
Я измеряю высоту окна Splitpane_left_hbox (содержащего речь переменной ширины для текстовых предложений), чтобы назначить ту же высоту Hbox справа.Чтобы при появлении нового предложения оба текста в Splitpane_left_hbox и Splitpane_right_hbox появлялись на одном уровне в новой строке.
ПРОБЛЕМЫ:
- Splitpane_left_hbox.getHeight () возвращает 0.0 дажехотя в нем есть текст.
- Это не позволяет мне установить значение для Splitpane_left_hbox, чтобы расположить их на одном уровне.
Вопросы:
Как получить окончательную высоту Splitpane_left_hbox после того, как к нему был добавлен текст в речь?
Есть ли более эффективный способ сделать эти текстыпоявляются на одном уровне на обеих панелях?
Файл FXML:
<SplitPane fx:id="split_pane" dividerPositions="0.49613899613899615" prefHeight="497.0" prefWidth="1040.0">
<items>
<ScrollPane prefViewportHeight="341.0" prefViewportWidth="512.0">
<content>
<VBox fx:id="split_pane_1_Vbox" prefHeight="494.0" prefWidth="513.0">
<children>
<HBox fx:id="split_pane_1_hbox" fillHeight="false">
<children>
<Text fx:id="text_1" />
</children>
</HBox>
</children>
</VBox>
</content>
</ScrollPane>
<ScrollPane prefViewportHeight="341.0" prefViewportWidth="520.0">
<content>
<VBox fx:id="split_pane_2_Vbox" prefHeight="496.0" prefWidth="523.0">
<children>
<HBox fx:id="split_pane_2_hbox" prefHeight="300.0" prefWidth="200.0" />
<children>
<Text fx:id="text_2" />
</children>
</VBox>
</content>
</ScrollPane>
</items>
</SplitPane>
Метод Java:
void addFinalText(String sentence) {
Text text_1 = new Text(sentence.trim());
text_1.setFont(Font.font(null, FontWeight.MEDIUM, textSize));
double[] dividerPositions = split_pane.getDividerPositions();
double split_pane_width = split_pane.getPrefWidth();
double single_pane_width = dividerPositions[0] * split_pane_width;
text_1.setWrappingWidth(single_pane_width);
Text text_2 = new Text();
text_2.setFont(Font.font(null, FontWeight.MEDIUM, textSize));
Text text = new Text();
text.setText(sentence.trim() + " ");
text.setFont(Font.font(null, FontWeight.MEDIUM, textSize));
if (sentence.contains("hi")) {
text_2.setText("Yes" + "\n");
text_2.setFill(Color.RED);
text_1.setFill(Color.RED);
}
else {
text_2.setText("No" + "\n");
}
HBox left_hbox = new HBox();
left_hbox.getChildren().add(text_1);
double leftHboxHeight = left_hbox.getHeight();
HBox right_hbox = new HBox();
right_hbox.setHeight(leftHboxHeight);
right_hbox.getChildren().add(text_2);
right_hbox.getChildren().add(text_2);
left_hbox.getChildren().add(text_1);
}
Приложениеснимок экрана:
Я новичок в JavaFx.Заранее спасибо.`