Tut*_*tul 7 java linux gnome javafx
我帮助用Linux和OSX开发JavaFX应用程序.在Linux上,我们在gnome顶部栏上没有应用程序名称.我们有JavaFX的入口点.窗口有好名字,但在gnome上我们有类似"com.myApp.javaFXMainClass"的东西.
我对swing有同样的问题,我能用这些代码纠正它:
// Set name in system menubar for Gnome (and Linux)
if (System.getProperty("os.name").toLowerCase().contains("linux")) {
try {
Toolkit xToolkit = Toolkit.getDefaultToolkit();
Field awtAppClassNameField = xToolkit.getClass().getDeclaredField("awtAppClassName");
awtAppClassNameField.setAccessible(true);
awtAppClassNameField.set(xToolkit, "MyApp");
} catch (Exception e) {
// TODO
}
}
Run Code Online (Sandbox Code Playgroud)
如何用JavaFX做到这一点?
小智 8
package test;
import javafx.application.Preloader;
import javafx.stage.Stage;
public class TestPre extends Preloader {
@Override
public void start(Stage stage) throws Exception {
com.sun.glass.ui.Application.GetApplication().setName("app test");
}
}
package test;
import java.io.ByteArrayInputStream;
import java.util.Base64;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class Test extends Application {
@Override
public void start(Stage primaryStage) {
Button btn = new Button();
btn.setText("Say 'Hello World'");
btn.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
Test __app = new Test();
Stage __stage = new Stage();
__app.start(__stage);
}
});
StackPane root = new StackPane();
root.getChildren().add(btn);
Scene scene = new Scene(root, 300, 250);
String __simage = "iVBORw0K.....";
ByteArrayInputStream __imgstream = new ByteArrayInputStream(Base64.getDecoder().decode(__simage));
javafx.scene.image.Image __image = new javafx.scene.image.Image(__imgstream);
primaryStage.getIcons().add(__image);
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
com.sun.javafx.application.LauncherImpl.launchApplication(Test.class, TestPre.class, args);
}
}
Run Code Online (Sandbox Code Playgroud)
这个错误已经在这里报告了,但我无法让它工作,所以最后的手段是创建一个awt应用程序作为引导程序JavaFx,它的工作方式就像魅力一样
代码片段@gitlab
import javafx.application.Platform;
import javafx.embed.swing.JFXPanel;
import javafx.scene.Scene;
import javafx.scene.layout.StackPane;
import javax.swing.*;
import java.awt.*;
import java.lang.reflect.Field;
public class CustomJavaFxAppName {
private void display() {
JFrame f = new JFrame("CustomJavaFxAppName");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JFXPanel jfxPanel = new JFXPanel() {
@Override
public Dimension getPreferredSize() {
return new Dimension(320, 240);
}
};
initJFXPanel(jfxPanel);
f.add(jfxPanel);
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
private void initJFXPanel(JFXPanel jfxPanel) {
Platform.runLater(() -> {
javafx.scene.control.Label label = new javafx.scene.control.Label(
System.getProperty("os.name") + " v"
+ System.getProperty("os.version") + "; Java v"
+ System.getProperty("java.version"));
StackPane root = new StackPane(label);
Scene scene = new Scene(root);
jfxPanel.setScene(scene);
});
if (System.getProperty("os.name").toLowerCase().contains("linux")) {
try {
Toolkit xToolkit = Toolkit.getDefaultToolkit();
Field awtAppClassNameField = xToolkit.getClass().getDeclaredField("awtAppClassName");
awtAppClassNameField.setAccessible(true);
awtAppClassNameField.set(xToolkit, "MyApp");
} catch (Exception ignored) { }
}
}
public static void main(String[] args) {
EventQueue.invokeLater(new CustomJavaFxAppName()::display);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
732 次 |
| 最近记录: |