我对may e(fx)clipse应用程序有问题。我想在应用程序启动时显示一个启动屏幕。我成功地创建了实现StartupProgressTrackerService的类,并调用了我的stateReach方法。然而,我对javafx本身有问题。我想用StageStyle创建Stage。未装饰。然而,当我调用stage时。show()方法阶段不会立即渲染,并在创建主窗口后立即显示。它可以很好地工作,例如与舞台风格(StageStyle)配合使用。实用程序。当我使用showAndWait()方法时,它也会正确呈现,但它会阻止我的应用程序加载,直到我关闭后台。
这是我的代码:
public class MyStartupProgressTrackerService implements StartupProgressTrackerService {
private Stage stage;
public MyStartupProgressTrackerService() {
}
@Override
public OSGiRV osgiApplicationLaunched(IApplicationContext applicationContext) {
applicationContext.applicationRunning();
return StartupProgressTrackerService.OSGiRV.CONTINUE;
}
@Override
public void stateReached(ProgressState state) {
if (DefaultProgressState.JAVAFX_INITIALIZED.equals(state)) {
stage = new Stage(StageStyle.UNDECORATED);
stage.initModality(Modality.WINDOW_MODAL);
stage.setAlwaysOnTop(true);
ImageView view = null;
try {
view = new ImageView(SPLASH_IMAGE);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
BorderPane bp = new BorderPane();
bp.getChildren().add(view);
Scene scene = new Scene(bp, 400, 300);
stage.setScene(scene);
stage.show();
}
}
}
我找到了一个丑陋的解决方案,但至少它是可行的。我注意到了这个方法。showAndWait()作为副作用,完成了所有尚未渲染的控件的构建。所以诀窍是初始化初始屏幕,然后立即创建虚拟阶段,showAndWait()
它和close()
。我知道这个解决方案远非理想,所以如果有人能给我展示另一种方法使其工作,我将不胜感激:)
我的代码:
public void showSplash() {
splashScreen = createSplashScreen();
Stage stage2 = new Stage(StageStyle.TRANSPARENT);
splashScreen.show();
Platform.runLater(new Runnable() {
@Override
public void run() {
stage2.close();
}
});
stage2.showAndWait();
}
private Stage createSplashScreen() {
Stage stage = new Stage(StageStyle.UNDECORATED);
stage.setAlwaysOnTop(true);
VBox vbox = new VBox();
vbox.getChildren().add(new ImageView(splashImage));
Scene scene = new Scene(vbox, 400, 300);
stage.setScene(scene);
return stage;
}
这是我使用JavaFX的第二天,如果这似乎是一个太常见的知识问题的话。提前谢谢大家。 ..
我有一个未装饰的FXML舞台。我创建了一个按钮来最小化窗口,并在初始化方法的控制器类中为其创建了一个事件。 问题: 返回,而窗口在视觉上没有任何变化。 如果我从UNDECORATED切换到默认,我的自定义按钮完全有效。
我创建了一个小库,其中包含一个自定义窗口/阶段,用于使我的所有应用程序具有恒定和统一的外观。基本上,这只是一个没有装饰的舞台,有一个锚具,包含定制的最小化/最大化/关闭和调整大小控件。 唯一的问题是按下最小化按钮时执行的方法。在我的主系统(ArchLinux)上运行应用程序时不会发生任何事情,看起来应用程序被冻结了,这里有一个可视化示例:在Imgur上上传的示例图像,还没有足够的代表来发布图像 最
null
我一直试图从控制器打开一个新窗口以显示进度条: 请帮忙。没有例外,也没有错误。谢谢 编辑:我已经找到了它不显示的原因,这是因为在后面的代码中我有一个函数:阻止程序刷新我的场景和显示元素。是否有一种方法可以在后台或另一个线程中运行这一行(我以前从未使用过线程)再次感谢你的帮助。
我有一个未装饰的JavaFX舞台,我自己的最小化,最大化 有没有办法通过单击任务栏图标来最小化纯Java代码未修饰的阶段?如果不是的话,我该怎么做,比如说,JNA? 编辑:好的,我一直在尝试用JNA解决这个问题,但由于几乎没有C/C/JNA,我在设置这个方面有点麻烦。如果有人帮我把这些东西拼凑起来,我将不胜感激。。 到目前为止,这是我的代码: 编辑2:我最终在这一点上做得更进一步,但当我重新设置W