首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果拖动JavaFX ScrollPane内的按钮,如何使ScrollPane继续滚动?

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

Stack Overflow用户
提问于 2021-01-30 06:36:17
回答 1查看 148关注 0票数 0

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

问题是:如果我在ScrollPane中拖动鼠标,它可以正常工作,但是如果我将鼠标拖动到有按钮的地方,它就无法滚动(其想法是,ScrollPane中将填充没有空格的按钮)。

白色部分和按钮在ScrollPane内部

下面是在我的代码中创建ScrollPane的部分。

代码语言:javascript
复制
    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);
    }

编辑:

当按钮被拖动时,我添加了一个MouseEvent,但是我不知道如何“使滚动窗格被选中”来移动它。

代码语言:javascript
复制
    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();
            }
        });
    }
EN

回答 1

Stack Overflow用户

发布于 2021-01-31 05:02:35

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

代码语言:javascript
复制
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();
            }
        });
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65965311

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档