javafx如何主动刷新UI

刘大神仙 2020-05-28 08:54:47
类似javaswing中的repaint方法。

因为我的javafx项目中,parentPane中的childPane,在按住键盘方向键时,会移动childPane的位置。但是移动的时候不连贯,应该是刷新频率不够的原因。所以来请教一下,如何主动刷新UI
...全文
1729 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Kscstg 2021-03-02
  • 打赏
  • 举报
回复
我用了一个stage.hide()+stage.show()模拟刷屏
tianfang 2020-05-29
  • 打赏
  • 举报
回复
降低速度 +5 =》+3,+1, 增加延时,sleep 100ms,50ms
刘大神仙 2020-05-29
  • 打赏
  • 举报
回复
代码附上
package com.foo.example;

import application.panel.common.ImageUtil;
import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import javafx.scene.layout.Background;
import javafx.scene.layout.BackgroundImage;
import javafx.scene.layout.BackgroundPosition;
import javafx.scene.layout.BackgroundRepeat;
import javafx.scene.layout.BackgroundSize;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;

public class Test extends Application{
	public static Stage stage = null;
	public Pane childPane = null;
	@Override
	public void start(Stage stage) throws Exception {
		Test.stage = stage;
		Pane pane = new Pane();
		pane.setMinSize(800, 500);
		pane.setBackground((new Background(new BackgroundImage(new Image(ImageUtil.getFloorUrl("1")), BackgroundRepeat.NO_REPEAT, BackgroundRepeat.NO_REPEAT, BackgroundPosition.CENTER, BackgroundSize.DEFAULT))));
		childPane = new Pane();
		childPane.setMinSize(50, 50);
		childPane.setBackground(new Background(new BackgroundImage(new Image(ImageUtil.getRoleUrl("1")), BackgroundRepeat.NO_REPEAT, BackgroundRepeat.NO_REPEAT, BackgroundPosition.CENTER, BackgroundSize.DEFAULT)));
		pane.getChildren().add(childPane);
		Group group = new Group();
		group.getChildren().add(pane);
		Scene scene = new Scene(group);
		scene.setOnKeyPressed(new EventHandler<KeyEvent>() {
			@Override
			public void handle(KeyEvent e) {
				if(e.getCode() == KeyCode.RIGHT) {
					System.out.println("==");
					childPane.setLayoutX(childPane.getLayoutX() + 5);
				}
			}
		});
		Test.stage.setScene(scene);
		Test.stage.centerOnScreen();
		Test.stage.show();
	}
	
	public static void main(String[] args) {
		launch(args);
	}
}
刘大神仙 2020-05-29
  • 打赏
  • 举报
回复
代码很简单,如图,在按下右方向键的时候,childPane会向右移动。功能很简单,但是向右移动的时候,肉眼明显看出来childPane移动的时候,有闪烁,应该是刷新频率不够的原因。请大佬给个主动刷新的demo,万分感谢~!!!!
tianfang 2020-05-28
  • 打赏
  • 举报
回复
不是很清楚你的要求,查询 双缓冲 ,可能可以解决你的问题

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧