从jdk 8u40开始,我正在使用新的javafx.scene.control.AlertAPI来显示确认对话框.在下面的示例中,默认情况下"是"按钮而不是"否"按钮:
public boolean showConfirmDialog(String title, String header, String content, AlertType alertType) {
final Alert alert = new Alert(alertType);
alert.setTitle(title);
alert.setHeaderText(header);
alert.setContentText(content);
alert.getButtonTypes().clear();
alert.getButtonTypes().addAll(ButtonType.YES, ButtonType.NO);
final Optional<ButtonType> result = alert.showAndWait();
return result.get() == ButtonType.YES;
}
Run Code Online (Sandbox Code Playgroud)
我不知道如何改变它.
编辑:
这里是默认情况下聚焦"是"按钮的结果屏幕截图:

我开发了一个基于JavaFX和OSGi Felix容器的丰富应用程序.当我的JavaFX是开始,一个org.osgi.framework.BundleException被抛出,表明framwork无法电线我的JavaFX包:
ERROR: Bundle app-impl-bundle [3] Error starting eclipse-project:T:\workspace\fast-osgi\app-impl-bundle\ (org.osgi.framework.BundleException: Unresolved constraint in bundle app-impl-bundle [3]: Unable to resolve 3.0: missing requirement [3.0] osgi.wiring.package; (&(osgi.wiring.package=javafx.stage)(version>=2.2.0)))
Run Code Online (Sandbox Code Playgroud)
这是我的MANIFEST.MF文件:
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: app-impl-bundle
Bundle-SymbolicName: app-impl-bundle
Bundle-Version: 1.0.0.qualifier
Require-Bundle: app-bundle;bundle-version="0.0.1"
Bundle-Activator: com.mycompany.app.impl.Activator
Import-Package: javafx.stage;version="2.2.0",
javax.xml.parsers,
org.osgi.framework;version="1.8.0",
org.w3c.dom,
org.xml.sax
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Bundle-ClassPath: .,
target/lib/log4j-1.2.17.jar
Run Code Online (Sandbox Code Playgroud)
这里用于启动OSGi框架的VM Arguments(我使用此插件在Eclipse Luna下运行我的项目):
-Dosgi.requiredJavaVersion=1.8 -Dorg.osgi.framework.bundle.parent=ext
Run Code Online (Sandbox Code Playgroud)
最后一个参数无效.尽管如此,这篇文章告诉它它可以在Equinox上运行......
我找到了一个将此选项添加到VM参数的解决方案:
-Dorg.osgi.framework.system.packages.extra=javafx.stage
Run Code Online (Sandbox Code Playgroud)
但这不是很灵活.
您认为Felix OSGi的实现是否存在问题?它应该只与Equinox一起使用吗?有人可以帮帮我吗?这是正确的方法吗?