【问题标题】:My JavaFX Slider does not change value, it appears frozen我的 JavaFX Slider 没有改变值,它似乎被冻结了
【发布时间】:2016-11-27 20:31:24
【问题描述】:

当我尝试移动时,我的 JavaFX 滑块不会改变值。 我的滑块位于 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,以便更好地了解问题所在

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

编辑:更多代码

由于我的程序非常小,几乎只有这里实现的滑块是我的全部代码。

主类

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);

    }
}

图形界面类

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;
    }
}

【问题讨论】:

    标签: java javafx slider javafx-2


    【解决方案1】:

    您将画布直接放置在GUI 类创建的网格窗格中,而无需指定任何布局属性(例如行和列索引)。所以画布直接覆盖网格窗格,并接收鼠标事件,防止滑块接收它们。相反,请使用适当布局的布局窗格。例如:

    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);
    
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2020-12-03
      • 2012-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多