强制ScrollPane计算它的滑块尺寸

时间:2014-07-31 17:39:00

标签: java css canvas javafx

很难发布我在这里工作的代码,但这就是我想要做的事情

我从300x200 ScrollPane和300x200 Canvas开始,将画布放在滚动窗格中。

按下某个键时,应在画布上绘制该键。按下多个键时,它们会相互添加。

当要绘制的键区域扩展Canvas的300宽度限制时,Canvas的大小会相应增加,并且在新空间中绘制键并进一步发送滑块以显示正在按下的键。 (基本上像记事本或任何代码编辑器)

问题是滑块在内容宽度增加后大约10-15ms才实际更新它的界限。为了弥补这一点,我最终等待了20ms而不是改变滑块,但这给了我很多毛刺(帧很不稳定,其他操作在滑块位置之前发生等等)。

如何强制滑块的范围进行更新,以便我可以在添加它们的同一帧中显示新键?

e /示例代码

/ *

 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package javafxapplication11;

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

/**
 *
 * @author Arhowk
 */
public class JavaFXApplication11 extends Application {

    @Override
    public void start(Stage primaryStage) {
        ScrollPane root = new ScrollPane();
        BorderPane bp = new BorderPane();
        Canvas canvas = new Canvas(300,250);
        GraphicsContext ctx = canvas.getGraphicsContext2D();
        ctx.setFill(Color.RED);
        ctx.fillRect(0, 0, 300, 250);
        bp.setTop(canvas);
        root.setContent(bp);
        Scene scene = new Scene(root, 300, 250);

        primaryStage.setTitle("Hello World!");
        primaryStage.setScene(scene);
        primaryStage.show();

        root.setFocusTraversable(true);
        root.setOnKeyPressed((a) -> {
            canvas.setWidth(600);
            ctx.setFill(Color.BLUE);
            ctx.fillRect(300,0,300,250);
            root.setHvalue(1);
        });
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        launch(args);
    }

}

0 个答案:

没有答案