当前位置: 首页 > 知识库问答 >
问题:

如果ScrollPane中的按钮被拖动,如何使JavaFX ScrollPane继续滚动?

栾耀
2023-03-14

我在java项目的JFXPanel中有一个JavaFX ScrollPane。这个项目将在触摸显示器没有键盘,所以我需要模拟一个触摸屏滚动。

问题是;如果我在ScrollPane中拖动鼠标,它工作得很好,但如果我在有按钮的地方拖动鼠标,它就不能滚动(想法是ScrollPane将充满按钮,它们之间没有空格)。

    private static Scene createScene(int wS, int hS) {
        ScrollPane scrollPane = new ScrollPane();
        FlowPane flowpane = new FlowPane();
        
        scrollPane.setCache(true);
        scrollPane.setVbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);
        scrollPane.setPannable(true);

        for(int i=0; i<100; i++)
            flowpane.getChildren().add((new ButtonProduct(wS, "Apple " + (i+1)));
        
        scrollPane.setContent(flowpane);
        Scene  scene  =  new  Scene(scrollPane);
        return (scene);
    }
    public ButtonProduct(int wS, String t) {
        this.setText(t);
        this.setMinSize((int) (wS*sizeW), (int) (wS*sizeW));
        this.setPrefSize((int) (wS*sizeW), (int) (wS*sizeW));
        this.setMaxSize((int) (wS*sizeW), (int) (wS*sizeW));
        this.setOnDragDetected(new EventHandler<MouseEvent>() {
            @Override
            public void handle(MouseEvent e) {
                System.out.println("Dragged Button");
                e.consume();
            }
        });
    }

共有1个答案

澹台俊材
2023-03-14

我找到了答案,这是ScrollPane中按钮(节点)的代码。但是您需要恢复Button事件以获得更好的性能,这在下一段代码中没有得到开发。

import javax.swing.*;
import java.awt.*;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.control.Button;
import javafx.scene.input.MouseEvent;
import javafx.scene.control.ScrollPane;

public class ButtonProduct extends Button {
    private static double sizeW = .075;
    //Constructor
    public ButtonProduct(ScrollPane sC, int wS, String t) {
        this.setText(t);
        this.setMinSize((int) (wS*sizeW), (int) (wS*sizeW));
        this.setPrefSize((int) (wS*sizeW), (int) (wS*sizeW));
        this.setMaxSize((int) (wS*sizeW), (int) (wS*sizeW));
        this.setOnDragDetected(new EventHandler<MouseEvent>() {
            @Override
            public void handle(MouseEvent e) {
                ((Button) e.getSource()).setEventDispatcher(sC.getEventDispatcher());
                sC.requestFocus();
                e.consume();
            }
        });
    }
}
 类似资料:
  • 我使用ScrollPane,因为它内置了输入和抛出处理。我有一个滚动轮的图像,分为14个部分,滚动窗格本身是两个部分较短,以便将有一个部分在右侧和左侧,它可以滚动到任何一个方向。一旦滚动位置到达任何一个方向的末端,我想将滚动位置重置回中心。一遍又一遍地这样做应该会产生一个无限滚动轮的幻觉(希望如此)。 我遇到的问题是如何在代码中定位滚动窗格以重置图像,一旦它到达任何一端。到目前为止,我没有尝试设置

  • 我想知道是否有任何“简单”的方法,我可以设置垂直滚动条“滚动”一个特定的数量,按下按钮,或真正的任何事件在所有。 例如,我有一个应用程序,它有一个侧栏,侧栏上的一个选项是设置。Settings有子项,我想添加点击其中一个子项的功能,它将打开Settings页面,并自动向下滚动到该子项所在页面上的特定点。

  • 问题内容: 我正在尝试获取有关标准中包含的组件的信息。特别是我对阅读水平书感兴趣。我该如何引用? 问题答案: 由于上述方法并不适合所有人(包括我),因此我对其进行了更多调查,并找到了问题的根源。 一般而言,这两种方法都可以使用,但是只有在设置了的属性后才能使用。就我而言,仍然是在使用加载视图后仍然存在。 通过在属性未初始化的情况下延迟调用(使用单次侦听器)可以解决此问题。 工作样板代码:

  • 我在JavaFX应用程序上使用ScrollPane。Scrollpane以TilePane作为其内容,显示了数千个瓷砖。敲击太慢了。如何增加滚动窗格的滚动?谢了。

  • 嗨,有没有什么方法可以提高滚动速度。我找到了一些解决方案,但都不适合我。这就是我尝试的: 或者使用css: 还有别的办法吗?编辑:上面的解决方案都不起作用,我试图使用大得离谱的数字,但滚动速度还是一样

  • 我有一个元素,它本身有一个滚动条,还有一个单独的,它有一个滚动条。如何使其中一个滚动条与另一个滚动条的位置匹配? 我一直在查找获取滚动条位置的方法。 因为它们都返回不同的值,所以我必须知道它们的最大位置。