JavaFX 2 BorderPane 使用完整空间

2024-01-12

我只是面临一个我自己无法解决的小问题。 我尝试在 BorderPane 中放置一个包含 TextField 和 HTML 编辑器的 vBox,但是 未使用全部空间。另一个问题是,如果我缩小窗口,html 编辑器 与我的左侧选项窗口重叠。

private void initEditor()
{
editor = new HTMLEditor();
editor.setId("editor");
editor.lookup(".top-toolbar").setDisable(true);
editor.lookup(".top-toolbar").setManaged(false);
((ToolBar) editor.lookup(".bottom-toolbar")).getItems().addAll(FXCollections.observableArrayList(((ToolBar)editor.lookup(".top-toolbar")).getItems()));

editorBox = new VBox();
TextField field = new TextField();
field.setPrefHeight(36);
field.setId("editor-title");
editorBox.setFillWidth(true);
editorBox.getChildren().addAll(field, editor);
    root.setCenter(editorBox);
}

好的,这里出现了一些问题,我将尝试解决它们,并提供一些建议和示例解决方案。

我尝试在 BorderPane 中放置一个包含 TextField 和 HTML 编辑器的 vBox,但未使用全部空间。

您需要使用VBox.setVgrow(编辑器,Priority.ALWAYS) http://docs.oracle.com/javafx/2/api/javafx/scene/layout/VBox.html#setVgrow%28javafx.scene.Node,%20javafx.scene.layout.Priority%29方法让 HTMLEditor 占用 VBox 中的任何额外空间。另外,请确保 HTML 编辑器具有无限制的最大高度,以便它可以增长以适应可用区域,例如editor.setMaxSize(Double.MAX_VALUE, Double.MAX_VALUE)。呼唤editorBox.setFillWidth(true)作为默认值是多余的fillWidth财产是true.

但即使你做了所有这些,(从 2.2b13 开始)WebPane 大小调整中存在一个错误,这会给你带来问题。 WebPane 在内部被实现为包含工具栏和可编辑 WebView 的 GridPane。默认情况下,WebView 的首选尺寸为 800x600。 HtmlEditor 控件不会为 WebView 设置 GridPane 约束以允许其大小超过其首选大小。

要解决此问题,您可以通过 css 查找来查找 WebViewafter它已添加到活动场景并手动调整 GridPane 约束。这是一些执行此操作的代码:

stage.show();
...
WebView webview = (WebView) editor.lookup("WebView");
GridPane.setHgrow(webview, Priority.ALWAYS);
GridPane.setVgrow(webview, Priority.ALWAYS);

我缩小了窗口,html 编辑器与左侧选项窗口重叠。

明确设置 BorderPane 中中心窗格的最小宽度设置,以便它不会溢出外边缘窗格。

editorBox.setMinSize(0, 0);

您需要这样做是因为BorderPane 文档 http://docs.oracle.com/javafx/2/api/javafx/scene/layout/BorderPane.html states:

默认情况下,BorderPane 不会裁剪其内容,因此,如果子项的最小尺寸使其无法容纳在其空间内,则子项的边界可能会超出其自身的边界。


顺便说一句,代码中的查找调用是可疑的。通常,在节点被添加到显示舞台上的活动场景并且 JavaFX 系统有机会在节点上运行 CSS 布局传递之前,您无法通过 css ID 查找节点 - 否则查找将仅返回 null。


为了调试 JavaFX 布局问题,优美的风景 http://fxexperience.com/scenic-view/应用程序是无价的。


这是一个完整的示例,用于生成与您的问题中链接的图像类似的布局,但没有您提到的问题。

import com.javafx.experiments.scenicview.ScenicView;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.*;
import javafx.scene.web.*;
import javafx.stage.*;

public class HtmlEditorInBorderPane extends Application {
  public static void main(String[] args) { launch(args); }
  @Override public void start(final Stage stage) throws IOException {
    // option pane.
    VBox optionPane = new VBox(10);
    MenuBar menuBar = new MenuBar();
    menuBar.getMenus().addAll(new Menu("School"), new Menu("Social"), new Menu("Network"));
    TreeItem<String> root = new TreeItem<>("Private Notes");
    root.setExpanded(false);
    root.getChildren().addAll(new TreeItem<>("Layout"), new TreeItem<>("is not"), new TreeItem<>("easy"));
    TreeView<String> notes = new TreeView<>(root);
    optionPane.getChildren().addAll(menuBar, new Label("Kaiser Notes"), notes);
    optionPane.setStyle("-fx-background-color: cornsilk; -fx-padding: 10;");

    // editor pane.
    HTMLEditor editor = new HTMLEditor();
    VBox editorBox = new VBox(10);
    TextField textField = new TextField();
    editorBox.getChildren().addAll(textField, editor);
    editorBox.setStyle("-fx-background-color: mistyrose; -fx-padding: 10;");
    editor.setHtmlText(getSampleText());

    // option layout constraints
    VBox.setVgrow(notes, Priority.ALWAYS);

    // editor layout constraints
    textField.setMinHeight(Control.USE_PREF_SIZE); // stop the textfield from getting squashed when the scene is sized small.
    VBox.setVgrow(editor, Priority.ALWAYS);        // tells the editor to fill available vertical space.
    editorBox.setMinSize(0, 0);                    // stops the editor from overflowing it's bounds in a BorderPane.

    // layout the scene.
    BorderPane layout = new BorderPane();
    layout.setLeft(optionPane);
    layout.setCenter(editorBox);
    stage.setScene(new Scene(layout));
    stage.show();

    // addition of static layout grow constraints for the htmleditor embedded webview.
    WebView webview = (WebView) editor.lookup("WebView");
    GridPane.setHgrow(webview, Priority.ALWAYS);  // allow the webview to grow beyond it's preferred width of 800.
    GridPane.setVgrow(webview, Priority.ALWAYS);  // allow the webview to grow beyond it's preferred height of 600.
  }

  // get some dummy lorem ipsum sample text.
  private String getSampleText() throws IOException {
    StringBuilder builder = new StringBuilder();
    try (BufferedReader in = new BufferedReader(new InputStreamReader(new URL("http://www.lorem-ipsum-text.com/").openStream()))) {
      String string;
      while ((string = in.readLine()) != null) {
        builder.append(string);
      }
    }
    return builder.toString();
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaFX 2 BorderPane 使用完整空间 的相关文章

  • 在 Java Swing 中检测 JScrollPane 上的 mouseClick 事件

    如果我有这样的东西 我可以使用布尔标志 performAdjustment 控制自动滚动 static boolean performAdjustment true JTextArea textArea new JTextArea JScr
  • 如何自定义BlockingQueue的阻塞行为

    我想创建一个阻塞队列 它根据自定义规则而不是队列中的项目数量来阻止生产者 例如 生产者生成一些文件并放入队列中 消费者经过一番分析后将它们转移到特定位置 对于上述场景 如果队列中的总文件大小达到某个阈值 我希望生产者等待生成新文件 如果总大
  • 从 OMElement 对象获取 InputStream/io.Reader

    我有一个OMElement对象 从中我想得到一个InputStream或读者对象 我想要的是流式传输xml来自OMElement我有 没有加载到内存中 我只能得到XMLStreamReader对此表示反对 但我找不到办法得到InputStr
  • Java Swing:清除JList而不触发监听器

    我的情况如下 我有一个 JList 只要在列表中进行选择 它就会触发搜索 使用 ListSelectionListener 我正在尝试使用以下命令重置列表上的选择list clearSelection 这样做的问题是使用clearSelec
  • 方法不必要地被调用?

    我有一个 BaseActivity 它可以通过其他所有活动进行扩展 问题是 每当用户离开 暂停 活动时 我都会将音乐静音 我也不再接听电话 问题是 onPause每当用户在活动之间切换时就会被调用 这意味着应用程序不必要地静音和停止tele
  • 在 Jar 中为 Gluon Scene Builder 11.00 创建自定义控件

    我想在可执行 jar 文件中创建自定义控件 然后在 Gluon Scene Builder 11 00 中使用 我需要知道如何做到这一点 我尝试了几种形式 但在场景生成器中导入 jar 时我的控件没有出现 我正在使用 IntelliJ Co
  • 删除 servlet 中的 cookie 时出现问题

    我尝试使用以下代码删除 servlet 中的 cookie Cookie minIdCookie null for Cookie c req getCookies if c getName equals iPlanetDirectoryPr
  • 如何正确配置Tomcat SSLHostConfig?

    我正在按照本教程在 tomcat 中启用 ssl https medium com raupach how to install lets encrypt with tomcat 3db8a469e3d2 https medium com
  • firestore快照监听器生命周期和定价之间有什么关系?

    在我的活动中 我有一个字符串列表 这些字符串表示我想要附加快照侦听器的 Firestore 文档 我使用 Acivity ModelView 存储库结构 在活动的 onCreate 中 我向 ViewModelProvider 询问适当的
  • 如何消除警告:使用“$”而不是“.”对于 Eclipse 中的内部类

    我是 Android 开发新手 当我将 eclipse 和 Android SDK 更新到最新版本后 我收到警告 Use instead of for inner classes or use only lowercase letters
  • 在 Spring 中设置 WS https 调用超时 (HttpsUrlConnectionMessageSender)

    我正在尝试为 WS 调用设置超时 我延长了WebServiceGatewaySupport并尝试将发送者超时设置为如下 public Object marshalSendAndReceive Object requestPayload We
  • F# 对于 OO 或命令式来说缺少什么? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何使用 Java 原生接口从 Java 调用 Go 函数?

    可以通过以下方式调用 C 方法JNA https en wikipedia org wiki Java Native AccessJava 中的接口 如何使用 Go 实现相同的功能 package main import fmt impor
  • .class 与 .java

    class 文件和 java 文件有什么区别 我正在尝试让我的小程序工作 但目前我只能在 Eclipse 中运行它 还不能嵌入 HTML 谢谢 编辑 那么如何使用 JVM 进行编译呢 class 文件是编译后的 java 文件 java 都
  • 哪种 Java DOM 包装器是最好或最受欢迎的? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 存储过程将多个表返回到 spring jdbc 模板

    我正在使用 JdbcTemplate 从 Spring DAO 类调用存储过程 我的问题是 存储过程返回多个表 有没有办法使用 Spring JdbcTemplate 访问多个表 如果我使用jdbcTemplate queryForList
  • 是什么原因导致“对象不是声明类的实例”? [复制]

    这个问题在这里已经有答案了 可能的重复 使用反射调用方法时 为什么会出现 对象不是声明类的实例 https stackoverflow com questions 7202988 why do i get object is not an
  • 如何计算文件中单词的长度?爪哇

    我正在尝试编写一个代码来计算文件中特定长度的单词数 例如 How are you 会打印 Proportion of 3 letter words 100 3 words 我想计算长度为 1 2 3 4 5 6 7 8 9 10 11 12
  • Android同步onSensorChanged?

    这是我的问题的后续 Android线程可运行性能 https stackoverflow com questions 36395440 android thread runnable performance 我在理解应用程序的同步方法时遇到
  • 如何使用 Spring AOP 建议静态方法?

    在执行类的静态方法之前和之后需要完成一些日志记录 我尝试使用 Spring AOP 来实现这一点 但它不起作用 而对于正常方法来说它起作用 请帮助我理解如何实现这一点 如果可以使用注释来完成 那就太好了 也许您应该在使用 Spring AO

随机推荐

  • Hibernate 中的通用 DAO 模式

    在处理 Hibernate 时 我们遵循 Hibernate Doc 中提到的通用 Hibernate DAO 模式 因此 我们目前正在维护两个并行的层次结构 1 对于接口 2 实施 因此 如果我们以这种方式工作 即使除了标准持久性方法之外
  • 如何在 xampp windows [php 7.2] 中安装/启用 GD?

    我不知道如何为 PHP7 2 安装 php gd 有没有办法在 xampp windows 中安装 启用 GD 扩展 我检查了 php ini 文件php gd2 dll但我找不到那条线 PHP7 2 中似乎缺少 GD 有什么建议么 转到
  • 是否可以使用指向参数数量未知的函数的指针?

    我正在编写一个简单的类来衡量函数在时间方面的性能 用户应该能够发送指向他的函数的指针 函数的参数 调用该函数的时间以及我将调用该函数的时间 返回经过的时间 我的问题是我不知道用户的函数需要多少个参数 我想使用可变参数函数来获取未知数量的参数
  • 运行 tf.estimator.train 100 步时,在张量板上仅看到一个步骤

    我有一个通过我自己的自定义构建的自定义估算器model fn 我想跑train并在张量板上查看每个步骤的数据点 但是 无论步骤数如何 每次调用我都只能看到一个数据点 以下是我构建和训练估算器的方法 estimator tf estimato
  • 以给定概率获取伪随机项

    我想在用户登录时给他一个奖品 但它需要有一些稀有的奖品 所以我想使用百分比以不同的机会出现奖品 我想显示其中之一 50 flower 30 book 20 mobile 使用他们拥有的百分比 如果有任何方法使用 Node js 或只是 ja
  • 我应该如何在 ECS 上设置 Traefik?

    简而言之 我已经成功跑了Traefik本地及上AWS ECS但现在我想知道应该如何设置某种负载平衡 以使我的两个具有随机 IP 的服务可供公众使用 我当前在 ECS 上的设置 Internet Load balancer on port 4
  • gcloud 未添加用于连接 GKE 集群的访问令牌

    我创建了一个 GKE 集群并使用以下命令连接到它kubectl运行针对我的集群单击 连接 按钮时出现的命令 gcloud container clusters get credentials cluster name zone us cen
  • SpringServletContainerInitializer 无法转换为 javax.servlet.ServletContainerInitializer

    我正在尝试将基于 xml 的 Spring MVC 应用程序移动到基于 Java 配置的应用程序 似乎与 maven 中可用的各种 java servlet 类不匹配 例如 有些提供 addServlet 方法 有些则不提供 这是我的配置类
  • VS 测试在管道中失败,缺少“Microsoft.NET.Test.Sdk”

    由于以下原因 我的构建失败了视觉工作室测试我的构建管道中的步骤失败 我有一个简单的 NET Core v2 1 类库和关联的 MS 测试库 我的管道有两个步骤 NET Core 构建步骤 以及 Visual Studio 测试步骤 这两个项
  • 将字符串移动到向量中

    有没有办法move将 std string 的内容转换为 std vector 我认为现在语言中有右值引用 这个操作有时会非常有用 It is 理论上可以从一种对象类型移动到另一种对象类型 然而 这些对象类型的设计必须允许这样做 vecto
  • 调整闪亮控件的标签位置

    令我惊讶的是 StackOverflow 上以前没有出现过这个问题 但无论如何 问题是 目前 标签文本 年龄范围 在此处指定 sliderInput inputId age Age Range min 32 max 99 value c 3
  • 为什么camel kafka Producer很慢?

    我使用 apache camel kafka 作为生成消息的客户端 我观察到 kafka 生产者需要 1 毫秒才能推送一条消息 如果我使用骆驼聚合将消息合并到批处理中 那么推送一条消息需要 100 毫秒 安装简述 3 kafka 集群 16
  • 仅在选定的列上使用 sklearn StandardScaler [重复]

    这个问题在这里已经有答案了 我有一个 numpy 数组 X 有 3 列 如下所示 array 3791 2629 0 1198760 113989 0 4120665 0 1 前 2 列是连续值 最后一列是二进制 0 1 我想仅将 Stan
  • 最快的 iPhone Blit 例程?

    我有一个UIView我需要将其位块传送到的子类UIImage 有多种方法可以给这只猫剥皮 具体取决于您喜欢使用哪个系列的 API 我对最快的感兴趣 可不可能是UIImage s drawAtPoint or drawRect 或者也许是基于
  • 如何在 JavaScript 中正确柯里化函数?

    我写了一个简单的curryJavaScript 中的函数在大多数情况下都能正常工作 const curry f a gt a length lt f length b gt curry f a b f a const add curry a
  • C - 将可变数量的命令行参数传递到具有可变数量参数的方法中

    我正在编写一个 C 程序 它将采用可变数量的命令行参数 然后 我需要获取这些参数并将它们传递到一个函数中 该函数将可变数量的文件名作为单独的参数 使用 va arg 获取函数内的参数 原型为 void FindFile char filen
  • C++:响应 Windows 注销的清理操作

    我想捕获 Windows 注销事件 以便可以进行一些清理 我的WindowProc看起来像这样 switch uMsg case WM ENDSESSION case WM DESTROY PostQuitMessage 0 return
  • ggplot:从年份子集中添加新行

    我有大约 90 年的每日数据 我想绘制长期平均值 以及我的调查期间 2014 2018 每年的单独线条 数据如下 gt head dischg date ddmm year cfs daymo 1 1 Jan 27 01 Jan 1927
  • .bash_profile 和终端

    my bash profile looks this way 当我打开终端时 我看到这三行 bash 导出 Workbooks app Contents SharedSupport path bin not a valid identifi
  • JavaFX 2 BorderPane 使用完整空间

    我只是面临一个我自己无法解决的小问题 我尝试在 BorderPane 中放置一个包含 TextField 和 HTML 编辑器的 vBox 但是 未使用全部空间 另一个问题是 如果我缩小窗口 html 编辑器 与我的左侧选项窗口重叠 pri