嗨,我目前正在玩JavaFX中的GridPane,偶然发现了一个问题...我想创建一个包含三行的布局,其中中间一行增长并占用所有可用空间,但我就是无法让它工作。中间行变得太大,并将窗口下方的底部行“推”到不再可见的位置...我如何使底部行始终在底部,让中间行占用中间的可用空间,但不能再这样了...我将在下面粘贴我的代码。
谢啦!
(注意:为清晰起见,代码略有改动,但工作方式相同)
RowConstraints row1 = new RowConstraints(25);
row1.setVgrow(Priority.NEVER);
RowConstraints row2 = new RowConstraints();
row2.setVgrow(Priority.ALWAYS);
RowConstraints row3 = new RowConstraints(25);
row3.setVgrow(Priority.NEVER);
ColumnConstraints column1 = new ColumnConstraints();
column1.setPercentWidth(100);
gridPane.getRowConstraints().add(0, row1);
gridPane.getRowConstraints().add(1, row2);
gridPane.getRowConstraints().add(2, row3);
gridPane.getColumnConstraints().add(0, column1);
gridPane.add(node1, 0, 0);
gridPane.add(node2, 0, 1);
gridPane.add(node3, 0, 2);
更新!添加“最小、完整和可验证的示例”
Test.java
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.MenuBar;
import javafx.scene.layout.ColumnConstraints;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.RowConstraints;
import javafx.stage.Stage;
public class Test extends Application {
@Override
public void start(Stage primaryStage) {
GridPane grid = new GridPane();
MenuBar menuBar = new MenuBar();
TestPane pane = new TestPane();
RowConstraints menuRow = new RowConstraints(25);
RowConstraints regRow = new RowConstraints();
regRow.setPercentHeight(100);
ColumnConstraints regColumn = new ColumnConstraints();
regColumn.setPercentWidth(100);
grid.getColumnConstraints().addAll(regColumn);
grid.getRowConstraints().addAll(menuRow, regRow);
grid.add(menuBar, 0, 0);
grid.add(pane, 0, 1);
Scene scene = new Scene(grid, 500, 350);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
TestPane.java
import javafx.scene.control.ListView;
import javafx.scene.control.TextField;
import javafx.scene.layout.ColumnConstraints;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.Priority;
import javafx.scene.layout.RowConstraints;
public class TestPane extends GridPane {
public TestPane() {
RowConstraints fixedRow = new RowConstraints(25);
fixedRow.setVgrow(Priority.NEVER);
RowConstraints growingRow = new RowConstraints();
growingRow.setVgrow(Priority.ALWAYS);
ColumnConstraints column = new ColumnConstraints();
column.setPercentWidth(100);
this.getRowConstraints().addAll(fixedRow, growingRow, fixedRow);
this.getColumnConstraints().addAll(column);
TextField field1 = new TextField();
ListView list = new ListView<>();
TextField field2 = new TextField();
this.add(field1, 0, 0);
this.add(list, 0, 1);
this.add(field2, 0, 2);
}
}
在“外部”容器(即“测试
”中定义的网格窗格)中,您有两行。顶行固定为 25 像素,而将第二行设置为容器高度的 100%。这些显然是矛盾的。(我认为)发生的事情是,第二行的内容被分配与网格窗格本身相同的高度(因为您将百分比高度
设置为100%),但是由于没有足够的空间来显示所有内容,因此会被剪切。
不用设置高度百分比,只需像在< code>TestPane中一样设置< code>vgrow属性:
RowConstraints menuRow = new RowConstraints(25);
RowConstraints regRow = new RowConstraints();
// regRow.setPercentHeight(100);
regRow.setVgrow(Priority.ALWAYS);
我有一个JavaFX应用程序,它可以与服务器通信并从服务器获取数据。接收到的数据被放入ObservableList并显示在TableView中。 与服务器的通信在它自己的线程中运行,当调用观测ist.add它会触发一个IllegalStateException(抱怨不是事件线程/不是JavaFX线程) 我已经找到了一个类似问题的以下解决方案,但我不确定如何采用该解决方案,因为在我的情况下,与服务器
最近Sun公司推出了JavaFX框架,使用它可以利用JavaFX编程语言来开发富互联网应用程序(RIA)。这个新开发组件有许多 令人惊喜的地方。它的功能非常丰富,对于Java开发者来说,它的类Java语法可以让人们非常轻松的动手开发富互联网应用程序。但是它面临两个重量级的 竞争对手,Adobe和微软,它们分别推出了Flex/AIR和Silverlight,来帮助程序员开发富互联网程序,它们不仅更加
我使用OpenJDK 11和OpenJFX 11.0.1与Gradle在IntelliJ IDEA为我的项目。当我使用javafx.base模块时,IntelliJ IDEA在第1行(项目模块声明)报告了一个错误,说我没有在模块需求中包含javafx.beans模块(bean是javafx.base模块中的一个包)。Gradle jar任务执行时没有任何错误或警告,因此此错误可能与IntelliJ
本文向大家介绍javafx TextInputDialog,包括了javafx TextInputDialog的使用技巧和注意事项,需要的朋友参考一下 示例 TextInputDialog允许用户要求输入一个String。
本文向大家介绍javafx AnchorPane,包括了javafx AnchorPane的使用技巧和注意事项,需要的朋友参考一下 示例 AnchorPane 是一种布局,允许将内容放置在距离其侧面特定距离的位置。 有4种设置方法和4种获取距离的方法AnchorPane。这些方法的第一个参数是child Node。设置器的第二个参数是Double要使用的值。该值可以null指示给定边没有约束。 s
我刚刚安装了JDK8,以使用WebView,但我得到了一个错误。错误是这样的: 我不知道为什么Swing没有嵌入到JavaFX for JDK8,但是有人知道如何解决这个问题吗? “Java-版本输出” Java版本“1.8.0_11”Java(TM)SE运行时环境(Build1.8.0_11-B12)Java HotSpot(TM)64位服务器VM(Build25.11-B03,混合模式) 问题
主要内容:DatePicker创建,自定义日期选择器,DateCell,示例JavaFX 允许从给定日历中选择一天。控件包含一个带有日期字段和日期选择器的组合框。JavaFX DatePicker控件使用JDK8日期时间API。 上面的代码生成以下结果。 DatePicker创建 我们可以创建一个并在类构造函数中设置一个特定的日期值。 还可以使用方法设置日期值。 以下代码使用向结束添加更多时间。 上面的代码生成以下结果。 自定义日期选择器 可以通过使用方法来启用和禁用在中
主要内容:示例,VBox间距,设置填充和间距VBox布局将子节点堆叠在垂直列中。新添加的子节点被放置在上一个子节点的下面。默认情况下,VBox尊重子节点的首选宽度和高度。 当父节点不可调整大小时,例如节点,最大垂直列的宽度基于具有最大优选宽度的节点。 默认情况下,每个子节点与左上()位置对齐。 示例 以下代码将控件设置为在调整父的高度时垂直增长: 完整的代码如下所示- 上面的代码生成以下结果。 下面的代码使用四个矩形来演示的使用。 上面的代