我有几个 UI 元素要垂直堆叠,位于面板中心,所有元素都对齐到中心的左边缘。我尝试使用 VBox 实现,一开始它是可以工作的,直到我添加了一个文本太长的项目;它总是用省略号截断文本,我无法让它将文本换行到下一行。我在复选框上设置了 wrapText 参数为 true,但它似乎不起作用。我试着在复选框和它所在的 VBox 上设置 perfWidth 和 maxWidth,但什么都没用。有人能告诉我我做错了什么吗?
屏幕截图:
屏幕截图:
textwrap.fxml
<?import java.net.*?>
<?import javafx.geometry.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.text.*?>
<?import javafx.scene.control.ToggleGroup?>
<VBox xmlns:fx="http://javafx.com/fxml" maxWidth="100"
prefHeight="200" prefWidth="300" alignment="BASELINE_CENTER" spacing="30">
<VBox alignment="CENTER" maxWidth="100" prefWidth="100">
<VBox spacing="10" style=" -fx-border-color:black; -fx-border-width: 1; -fx-border-style: solid;" alignment="BASELINE_LEFT"
>
<padding>
<Insets top="0" right="0" bottom="10" left="5"/>
</padding>
<RadioButton text="Option 1">
<toggleGroup>
<ToggleGroup fx:id="group"/>
</toggleGroup>
<selected>true</selected>
</RadioButton>
<RadioButton text="Option 2">
<toggleGroup>
<fx:reference source="group"/>
</toggleGroup>
</RadioButton>
</VBox>
<CheckBox text="My Long Textbox Text" selected="true" wrapText="true">
</CheckBox>
</VBox>
</VBox>
TextWrap.java
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class TextWrap extends Application
{
@Override
public void start(Stage stage) throws Exception
{
Parent root = FXMLLoader.load(getClass().getResource("textwrap.fxml"));
Scene scene = new Scene(root, 300, 275);
stage.setTitle("Text Wrap");
stage.setScene(scene);
stage.show();
}
public static void main(String[] args)
{
launch();
}
}
编辑 - 正如下面的 @jewelsea 指出的那样,问题是根 VBox 中的 BASELINE_CENTER;将其更改为 center 可以解决截断问题。这样做的副作用是使单选框周围的外部扩展得比我想要的更远:
通过添加
<maxWidth><Control fx:constant="USE_PREF_SIZE" /></maxWidth>
对于内部VBOX,我能够进行修正:
我还发现,如果由于某种原因我必须使用BASELINE_CENTER,我仍然可以通过添加以下内容来解决复选框文本的问题:
<minWidth><Control fx:constant="USE_PREF_SIZE" /></minWidth>
勾选复选框以获得相同的效果。