很难发布我在这里工作的代码,但这就是我想要做的事情
我从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);
}
}