我有一个网格窗格
,有5列。这些分别是我对列约束的hgrow
设置。
有时
始终
有时
(固定大小)有时
始终
整个 GridPane
基本上是两列形式的布局。我的列 1 和 4(索引 0 和 3)是字段标签,而列 2 和 5 是输入字段(文本字段
等)。列 3 只是两个表单列之间的固定宽度填充。
我的表单中有一些组合框
- 有些在左列,有些在右列。我已将所有组合框
的最大宽度设置为MAX_VALUE
。
加载表单时,布局与我预期的一样(两个输入字段列的宽度相等)。但是,当我单击任何一个<code>组合框</code>时,会导致单击的<code>复合框</code>所在的列的宽度增加-这会导致另一个输入字段列的宽度减少相同的量。
我可以交替单击左侧和右侧的ComboBox
,并且两列的宽度都会不断变化。更改将变得越来越小,最终列将停止调整大小。最终结果是两列的宽度不相等。
我对JFoix
库中的另一个控件JFXDatePicker
有相同的问题。
我的另一个限制是此表单位于SplitPane
中,因此我必须避免设置显式宽度。
我该怎么做才能解决此问题?
考虑到这个问题的观点很少,我想我会在这里附上一个示例。
@Override
public void start(Stage primaryStage) throws Exception {
VBox root = FXMLLoader.load(getClass().getResource("Test.fxml"));
Scene sc = new Scene(root);
primaryStage.setScene(sc);
primaryStage.show();
}
FXML:
<VBox maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" minHeight="-Infinity" minWidth="-Infinity" xmlns="http://javafx.com/javafx/8.0.111" xmlns:fx="http://javafx.com/fxml/1">
<padding>
<Insets bottom="30.0" left="30.0" right="30.0" top="30.0" />
</padding>
<children>
<GridPane hgap="6.0" vgap="6.0" VBox.vgrow="ALWAYS">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" />
<ColumnConstraints hgrow="ALWAYS" maxWidth="1.7976931348623157E308" />
<ColumnConstraints hgrow="SOMETIMES" />
<ColumnConstraints hgrow="ALWAYS" maxWidth="1.7976931348623157E308" />
</columnConstraints>
<rowConstraints>
<RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<Label text="Left 1" GridPane.halignment="RIGHT" />
<Label text="Left 2" GridPane.halignment="RIGHT" GridPane.rowIndex="1" />
<Label text="Left 3" GridPane.halignment="RIGHT" GridPane.rowIndex="2" />
<Label text="Right 1" GridPane.columnIndex="2" GridPane.halignment="RIGHT" />
<Label text="Right 2" GridPane.columnIndex="2" GridPane.halignment="RIGHT" GridPane.rowIndex="1" />
<Label text="Right 3" GridPane.columnIndex="2" GridPane.halignment="RIGHT" GridPane.rowIndex="2" />
<ComboBox maxWidth="1.7976931348623157E308" GridPane.columnIndex="1" />
<ComboBox maxWidth="1.7976931348623157E308" GridPane.columnIndex="3" />
<ComboBox maxWidth="1.7976931348623157E308" GridPane.columnIndex="3" GridPane.rowIndex="2" />
</children>
</GridPane>
</children>
</VBox>
结果是:
如GIF所示,布局是我在窗口最初启动时想要的。当我单击右侧的一个组合框时,该列突然增加了其宽度并缩小了另一列。我需要两列的宽度在单击任何组合框时保持恒定。
似乎我在我的问题中遗漏了一些信息。我需要的最终结果是一个 GridPane,
其中包含两个标签输入对中的 4 列。可以在对之间添加额外的列,以在对之间添加额外的填充,但这是可选的。整个网格将处于可调整大小的环境中(例如,在我的示例中 - 可调整大小的舞台)。我相信可调整大小的环境不是不合理的,否则我会给所有列绝对大小(甚至使用任何Pane
并给它绝对位置),问题就不会存在。
这两个标签必须始终可见(除非整个< code>GridPane被缩小到非常小的尺寸),并且必须给输入控件(< code>TextField、< code>ComboBox等)留出额外的空间。类似地,如果收缩< code>GridPane,我希望收缩的是输入列,而不是标签列。标签列应该始终保持固定的大小,这个大小是显示所有标签而不出现省略号所需的最小大小。
由于最终表单混合了不同的输入控件,如果不将<code>组合框
我还希望两个输入列具有相同的宽度,并且这必须始终保持不变。
我对此进行了错误报告,它目前仍以P3优先级打开。
这是一个很旧的帖子,但我刚刚遇到这个问题,发现最好的方法是动态地将宽度处理程序添加到ComboBox和GridPane,我有一个4 x 2的网格,带有标签/组合/标签/组合很像你做的:
cmbOne.setOnShowing(e -> detailsGrid.getColumnConstraints().get(1).setMaxWidth(cmbOne.getWidth()));
cmbTwo.setOnShowing(e -> detailsGrid.getColumnConstraints().get(3).setMaxWidth(cmbTwo.getWidth()));
detailsGrid.widthProperty().addListener(e -> {
detailsGrid.getColumnConstraints().get(1).setMaxWidth(Double.MAX_VALUE);
detailsGrid.getColumnConstraints().get(3).setMaxWidth(Double.MAX_VALUE);
});
我设置了我的两个组合框,在打开之前锁定列约束,然后当网格宽度改变时(通过调整大小),我允许它再次增加大小。
我只是玩弄了这个设置,看看我能想出什么。这似乎正在起作用。我在列中使用了百分比。
<VBox maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" minHeight="-Infinity" minWidth="-Infinity" prefHeight="162.0" prefWidth="326.0" xmlns="http://javafx.com/javafx/8.0.111" xmlns:fx="http://javafx.com/fxml/1">
<padding>
<!--Insets bottom="30.0" left="30.0" right="30.0" top="30.0" /-->
</padding>
<children>
<GridPane hgap="6.0" vgap="6.0" VBox.vgrow="SOMETIMES">
<columnConstraints>
<ColumnConstraints halignment="RIGHT" hgrow="NEVER" percentWidth="15.0" />
<ColumnConstraints hgrow="SOMETIMES" percentWidth="35.0" />
<ColumnConstraints halignment="RIGHT" hgrow="NEVER" percentWidth="15.0" />
<ColumnConstraints hgrow="SOMETIMES" percentWidth="35.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<Label text="Left 1" GridPane.halignment="RIGHT" />
<Label text="Left 2" GridPane.halignment="RIGHT" GridPane.rowIndex="1" />
<Label text="Left 3" GridPane.halignment="RIGHT" GridPane.rowIndex="2" />
<Label text="Right 1" GridPane.columnIndex="2" GridPane.halignment="RIGHT" />
<Label text="Right 2" GridPane.columnIndex="2" GridPane.halignment="RIGHT" GridPane.rowIndex="1" />
<Label text="Right 3" GridPane.columnIndex="2" GridPane.halignment="RIGHT" GridPane.rowIndex="2" />
<ComboBox maxWidth="1.7976931348623157E308" GridPane.columnIndex="1" />
<ComboBox maxWidth="1.7976931348623157E308" GridPane.columnIndex="3" />
<ComboBox maxWidth="1.7976931348623157E308" GridPane.columnIndex="3" GridPane.rowIndex="2" />
</children>
</GridPane>
</children>
</VBox>
问题内容: 嗨,我正在尝试使用ttk组合框创建带有options的下拉列表。这样做时,我可以配置传递给它的默认值的字体大小。但是,当我单击箭头时,其他值的字体大小保持不变。我正在为触摸屏开发应用程序,因此我需要提供适当的大小。这是示例代码,当我运行代码时,A的大小较大,单击箭头键上的按钮,我看到其他值都是默认大小。 问题答案: 问题是ttk组合框的下拉菜单实际上是一个简单的Tkinter列表框,因
我使用blocking queue(LinkedBlockingQueue)在几个线程之间同步数据。请看下图。 主线程是一个生产者,它产生对象,然后将它们放入每个消费者的队列中(线程2-10)。需要强调的是,每个消费者都有自己的队列,每个产生的对象都将进入所有消费者的队列。 生产者的运行速度比使用者快得多,因此我们可以假设在使用者运行期间队列不应该为空。当任何使用者的队列达到其容量时,生产者将被阻
我正在创建一个实现IAnimal接口的Animal类。然后,Cats和Dogs类都实现了IAnimal接口。目前,我在IAnimal中只保留了3个简单的方法,以便进行简短的演示。主要类动物是通过依赖注入(DI)构建的。 当IAnimal有更多的方法时,例如:Cats类只实现SomethingOnlyCatsDo方法,Dogs类实现SomethingOnlyDogsDo方法,那么每个类内部都会有更多
问题内容: 我刚刚发现了CSS属性,它为我解决了一堆跨浏览器布局问题。 我现在唯一的问题是IE7似乎不支持它。是否有破解程序可以使IE7支持它? 问题答案: 我假设您正在使用它来解决IE6盒模型。不幸的是,实际上没有通用的方法可以诱骗早期版本的IE支持任意CSS属性。 我建议不要使用该属性,因为除IE6之外的所有浏览器都将正确实现box模型。在维基百科的文章做了解释如何IE6不同的一个好工作。 为
问题内容: 在放入HashMap期间发生冲突时,是否会调整地图大小或将条目添加到该特定存储桶中的列表中? 问题答案: 当您说“冲突”时,您是指相同的哈希码吗?哈希码用于确定要使用HashMap中的哪个存储桶,并且该存储桶由具有相同哈希码的所有条目的链表组成。然后在返回或引导(获取/放入)之前比较条目的相等性(使用.equals())。 请注意,这是专门用于HashMap的(因为这是您所要求的),而
我想让JFrame上的组件随着窗口的大小调整而调整大小。 这怎么能做到。 当前,当我使JFrame变小时,组件会保留在相同的位置,然后随着框架变小而消失。 理想情况下,我希望设置一个最小的JFrame大小,它不允许表单变小,但当我将其变大时,组件应该随JFrame移动。 补充:如果我想使用绝对布局管理器,该怎么办。这是我老板比较喜欢的布局经理。 代码: 公共类TestFrame扩展JFrame{p