小编Mic*_*ims的帖子

在 JavaFX 中,如何将 ScrollPane 的内容保留在视口边框内?

我意识到我不可能是第一个希望将 ScrollPane 的内容保留在 ScrollPanes 视口边界内的人,但经过几个小时的搜索,我找不到问题的答案。

我用各种搜索词搜索了 Google、you.com 和 duckduckgo,例如

  • JavaFX ScrollPane 视口将内容限制在内部边框内
  • JavaFX ScrollPane 视口将内容保留在视口边框内

以及其他措辞的变化,我还没有找到答案。

我创建了基本的可重现代码,可以准确地对我在实际程序中呈现的数据进行建模。其实很简单:

  • 我有多个 VBox,每个 VBox 都有三个标签和一个分隔符。
  • 每个 VBox 都会添加到父 VBox。
  • 该父 VBox 被添加到 ScrollPane 中。
  • ScrollPane 删除了滚动条,并添加了一些浅色样式。

问题:滚动时,ScrollPane 的内容与 ScrollPane 视口的边框重叠,并且我无法弄清楚如何告诉 ScrollPane 将视口的内容保留在其边框内。

如果有另一种方法可以使可滚动内容保留在视口的边界内,我不知道这一点,并且希望为此提供任何指导。

我的假设是,视口的实际边框显然可以根据其宽度和颜色等进行定义,但它恰好是在与视口的实际内容相同的空间内“绘制”的。因此,不应假设边界是任何类型的预期边界,内容将通过该边界进行绑定......如果这是真的,我当然接受这一点,但这并不能帮助我实现该行为我追求的是,​​这是为了确保内容不会显示在视口边框上。

在这里,你可以看到我在说什么

在此输入图像描述

下面是显示该行为的代码:

import javafx.application.Application;
import javafx.geometry.HPos;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.ScrollPane;
import javafx.scene.control.Separator;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import javafx.stage.StageStyle;

import java.util.Random;

public class Main extends Application {

    @Override public void start(Stage stage) throws Exception …
Run Code Online (Sandbox Code Playgroud)

javafx scrollpane

5
推荐指数
1
解决办法
155
查看次数

Java Files.walk遇到异常错误后能否继续执行

这是我第一次在 Java 中使用 Files.walk,我非常喜欢它,尤其是 Path 类。它坚固耐用且用途广泛。

然而,我不喜欢的是,当遍历文件夹时,如果迭代器遇到障碍......就像它遇到了用户无权查看的文件夹或在抛出后可能遇到的任何错误例外的是,它不会继续,也不会产生要使用的路径列表。

这是我如何使用该方法的示例:

try {
    Stream<Path> paths    = Files.walk(rootPath);
    List<Path>   pathList = paths.collect(Collectors.toList());
    for (Path path : pathList) {
        //Processing code here
    }
 }
catch (FileSystemException a) {System.err.format("FileSystemException: %s%n", a);System.out.println(a.getStackTrace());}
catch (UncheckedIOException b) {System.err.format("UncheckedIOException: %s%n", b);System.out.println(b.getCause().getLocalizedMessage());}
catch (IOException c) { System.err.format("IOException: %s%n", c);System.out.println(c.getStackTrace());}
Run Code Online (Sandbox Code Playgroud)

现在,如果 Files.walk 方法在尝试遍历文件夹时遇到某种错误,它会抛出异常,当然代码会在捕获异常后继续执行。

我想要它做的是忽略它遇到的任何问题,并继续迭代它可以遍历的任何文件夹,而不会停止。

这可能吗?

java java-io

4
推荐指数
1
解决办法
1438
查看次数

卡在 javafx.graphics 上不会将 com.sun.javafx.sg.prism 导出到未命名模块

我已经被这个错误困扰了几天了。我已经用谷歌搜索了它,并以各种形式尝试了至少十几种不同的建议解决方案......

我的项目运行良好,直到我尝试使用一个名为MonacoFX的特定库,根据 GitHub 页面,该库是用 Java 13 开发的(我在这个项目中使用 Java 16.0.1)。该库的文档非常简单,您可以像使用大多数库一样实例化该库,然后只需使用它即可。但是,一旦我尝试实例化它,我就会在运行时收到此错误:

Exception in thread "JavaFX Application Thread"
java.lang.IllegalAccessError: superclass access check failed:
  class com.sun.javafx.sg.prism.web.NGWebView (in unnamed module @0x1937acaf)
        cannot access class com.sun.javafx.sg.prism.NGGroup (in module javafx.graphics) 
        because module javafx.graphics does not export 
        com.sun.javafx.sg.prism to unnamed module @0x1937acaf
at java.base/java.lang.ClassLoader.defineClass1(Native Method)
at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1012)
at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150)
at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:862)
at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:760)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:681)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:639)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
at eu.mihosoft.monacofx@0.0.7/eu.mihosoft.monacofx.MonacoFX.<init>(MonacoFX.java:49)
at com.dustinredmond.newgistfx/com.dustinredmond.newgistfx.data.GistFile.<init>(GistFile.java:28)
at com.dustinredmond.newgistfx/com.dustinredmond.newgistfx.data.GistObject.process(GistObject.java:113)
at com.dustinredmond.newgistfx/com.dustinredmond.newgistfx.data.GistObject.<init>(GistObject.java:27)
at com.dustinredmond.newgistfx/com.dustinredmond.newgistfx.github.GitHubApi.setGitHub(GitHubApi.java:31)
at com.dustinredmond.newgistfx/com.dustinredmond.newgistfx.ui.LoginWindowController.authenticate(LoginWindowController.java:39)
at com.dustinredmond.newgistfx/com.dustinredmond.newgistfx.ui.LoginWindow.lambda$new$1(LoginWindow.java:57)
at …
Run Code Online (Sandbox Code Playgroud)

java javafx java-module module-info

4
推荐指数
1
解决办法
7371
查看次数

无法弄清楚为什么 TreeView 在 JavaFX 中构建为镜像

我在 JavaFX 中的 TreeView 上遇到了一个奇怪的问题。

我使用它的应用程序根据基于 Web 的数据构建分支,因此需要一些时间来填充 TreeView。但随着它的填充,分支显示在顶部底部,但底部只是文本,而不是实际的 TreeItems。

如果有人想亲自尝试的话,我创建了最少的可重复生成的代码。我将最少的代码发布到 GitHub,您可以从这里克隆它

此屏幕截图也将显示该问题。

以下是重现该问题的类:

主要的:

public class Main extends Application {

    public static void main(String[] args) {
        launch(args);
    }
    
    private TreeItem<TreeNode> root;
    private Random random = new Random(System.currentTimeMillis());

    @Override
    public void start(Stage stage) throws Exception {
        root = new TreeItem<>(new TreeNode("Root", false));
        TreeView<TreeNode> treeView = new TreeView<>(root);
        treeView.setCellFactory(param -> new CellFactory());
        treeView.setShowRoot(false);
        ScrollPane scrollPane = new ScrollPane(treeView);
        double width = 500;
        double height …
Run Code Online (Sandbox Code Playgroud)

treeview javafx

1
推荐指数
1
解决办法
53
查看次数

标签 统计

javafx ×3

java ×2

java-io ×1

java-module ×1

module-info ×1

scrollpane ×1

treeview ×1