java - 我的 JavaFX Slider 没有改变值,它看起来卡住了

标签 java javafx slider javafx-2

当我尝试移动时,我的 JavaFX slider 的值没有改变。 我的 slider 位于 GridPane 布局内。

我的代码如下所示,如果您需要更多,请询问:

    root = new GridPane();
    root.setLayoutY(canvasHeight);
    root.setGridLinesVisible(true);
    root.setPadding(new Insets(10, 10, 10, 10));
    root.setVgap(2);

    Label lblAmount = new Label("Amount of fireworks  : ");
    GridPane.setConstraints(lblAmount, 0, 0);
    root.getChildren().add(lblAmount);

    Slider sliAmount = new Slider();
    sliAmount.setMin(1);
    sliAmount.setMax(10);
    sliAmount.setValue(5);
    sliAmount.setMaxWidth(100);
    root.getChildren().add(sliAmount);
    GridPane.setConstraints(sliAmount, 1, 0);

    Label lblPSize = new Label("Size of particles : ");
    GridPane.setConstraints(lblPSize, 0, 1);
    root.getChildren().add(lblPSize);

    root.getRowConstraints().add(new RowConstraints(15));
    root.getColumnConstraints().add(new ColumnConstraints(140));

Here这是一个 GIF,可以帮助您更好地了解问题所在

这是我的小程序中的样子:

1

编辑:更多代码

因为我的程序非常小,并且几乎只有这里实现的 slider 是我的所有代码。

主类

public class Main extends Application {

    private final int CANVAS_WIDTH = 1600;
    private final int CANVAS_HEIGHT = 750;
    private final int MENU_HEIGHT = 150;

    private GraphicsContext graphics;
    private GUI gui;

    @Override
    public void start(Stage primaryStage) throws Exception{
        gui = new GUI(CANVAS_WIDTH, CANVAS_HEIGHT, MENU_HEIGHT);
        gui.setup();

        Canvas canvas = new Canvas(CANVAS_WIDTH, CANVAS_HEIGHT);

        graphics = canvas.getGraphicsContext2D();

        clearCanvas();


        gui.getRoot().getChildren().add(canvas);


        primaryStage.setTitle("FireworkSim by Cedric Martens");
        primaryStage.setScene(new Scene(gui.getRoot(), CANVAS_WIDTH, CANVAS_HEIGHT + MENU_HEIGHT, Color.rgb(137, 182, 255)));
        primaryStage.show();
    }


    public static void main(String[] args) {
        launch(args);
    }

    private void clearCanvas()
    {
        //graphics.setFill(Color.BLACK);
        //graphics.fillRect(0, 0, CANVAS_WIDTH, CANVAS_HEIGHT);

    }
}

GUI 类

public class GUI {

    private GridPane root;
    private int canvasWidth;
    private int canvasHeight;
    private int menuHeight;

    public GUI(int canvasWidth, int canvasHeight, int menuHeight)
    {
        this.canvasWidth = canvasWidth;
        this.canvasHeight = canvasHeight;
        this.menuHeight = menuHeight;
    }

    public void setup()
    {
        root = new GridPane();
        root.setLayoutY(canvasHeight);
        root.setGridLinesVisible(true);
        root.setPadding(new Insets(10, 10, 10, 10));
        root.setVgap(2);

        Label lblAmount = new Label("Amount of fireworks  : ");
        GridPane.setConstraints(lblAmount, 0, 0);
        root.getChildren().add(lblAmount);

        Slider sliAmount = new Slider();
        sliAmount.setMin(1);
        sliAmount.setMax(10);
        sliAmount.setValue(5);
        sliAmount.setMaxWidth(100);
        root.getChildren().add(sliAmount);
        GridPane.setConstraints(sliAmount, 1, 0);

        Label lblPSize = new Label("Size of particles : ");
        GridPane.setConstraints(lblPSize, 0, 1);
        root.getChildren().add(lblPSize);

        root.getRowConstraints().add(new RowConstraints(15));
        root.getColumnConstraints().add(new ColumnConstraints(140));
    }

    public GridPane getRoot() {
        return root;
    }
}

最佳答案

您将 Canvas 直接放置在由 GUI 类创建的网格 Pane 中,而不指定任何布局属性(例如行和列索引)。因此 Canvas 直接覆盖网格 Pane ,并接收鼠标事件,从而防止 slider 接收它们。相反,请使用适当布局的布局 Pane 。例如:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.layout.BorderPane;
import javafx.scene.paint.Color;
import javafx.stage.Stage;

public class Main extends Application {

    private final int CANVAS_WIDTH = 1600;
    private final int CANVAS_HEIGHT = 750;
    private final int MENU_HEIGHT = 150;

    private GraphicsContext graphics;
    private GUI gui;

    @Override
    public void start(Stage primaryStage) throws Exception{

        BorderPane root = new BorderPane();
        gui = new GUI(CANVAS_WIDTH, CANVAS_HEIGHT, MENU_HEIGHT);
        gui.setup();

        Canvas canvas = new Canvas(CANVAS_WIDTH, CANVAS_HEIGHT);

        graphics = canvas.getGraphicsContext2D();

        clearCanvas();


        root.setCenter(canvas);
        root.setBottom(gui.getRoot());



        primaryStage.setTitle("FireworkSim by Cedric Martens");
        primaryStage.setScene(new Scene(root, CANVAS_WIDTH, CANVAS_HEIGHT + MENU_HEIGHT, Color.rgb(137, 182, 255)));
        primaryStage.show();
    }


    public static void main(String[] args) {
        launch(args);
    }

    private void clearCanvas()
    {
        graphics.setFill(Color.BLACK);
        graphics.fillRect(0, 0, CANVAS_WIDTH, CANVAS_HEIGHT);

    }
}

关于java - 我的 JavaFX Slider 没有改变值,它看起来卡住了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40833570/

相关文章:

java - 将 JasperReports 生成的 XML 从服务器端转换为客户端的 PDF

java - 使用 JNA 或 JNI 模拟在 Windows 中按下的键

java - 如何将 PDFBox.jar 集成到 Android 项目中?

java - 检测 JDialog 中 JPanel 上执行的操作

java - javafx 上的模态对话框意外挂起

javascript - 带固定表格的循环图像 slider

jquery - 在幻灯片中添加滑动功能

javafx - 在 JavaFX 的 FXML 文件中指定 ResourceBundle

javafx - Gluon 移动 iOS 音频播放器

javascript - 获取输入类型范围的值