我试图通过我的FXML应用程序中的ProcessBuilder创建并销毁我创建的外部进程,但它无效.这是基于Sergey Grinev给我的有用建议.
我尝试使用/不使用"// myController.setApp(this);"运行 并使用"// super.stop();" 在子类的顶部和底部(请参阅MyApp中该行的注释/输入),但没有组合可行.
这可能与FXML或JavaFX无关,但我认为这是在JavaFX上开发应用程序的常见模式.我想我要求一个Java最佳实践来关闭基于UI的应用程序中的依赖进程(如本例所示:基于FXML/JavaFX),其中有一个控制器类和一个应用程序类.
你能解释一下我做错了什么吗?或者更好:建议我应该做什么呢?谢谢.
在我的应用程序中我这样做:
public class MyApp extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
FXMLLoader fxmlLoader = new FXMLLoader();
Scene scene = (Scene)FXMLLoader.load(getClass().getResource("MyApp.fxml"));
MyAppController myController = (MyAppController)fxmlLoader.getController();
primaryStage.setScene(scene);
primaryStage.show();
// myController.setApp(this);
}
@Override
public void stop() throws Exception {
// super.stop();
// this is called on fx app close, you may call it in an action handler too
if (MyAppController.getScriptProcess() != null) {
MyAppController.getScriptProcess().destroy();
}
super.stop(); …Run Code Online (Sandbox Code Playgroud) 我在javafx应用程序中使用JFileChooser,Joption等swing组件.但是当我点击JFilechooser时,这就是应用程序的幕后黑手.如何解决这个问题呢.请给我一些建议.提前致谢.
有许多方法可以将窗格或背景场景的背景设置为透明.
e.g http://stackoverflow.com/questions/12717487/how-to-implement-a-transparent-pane-with-non-transparent-children
Run Code Online (Sandbox Code Playgroud)
但是,如果我有一个基于fxml和基于控制器的文件的应用程序,我怎么能这样做?
当我已经在基于fxml的文件中创建了一个应用程序,并且布局在基础上有一个AnchorPane,而在它上面有一些其他窗格.我如何实际将白色背景变为透明或半透明?
我的JavaFX项目有问题.有一刻我无法理解.据我所知,以下代码应该能够处理表的所有滚动事件,这是TableView的一个实例
table.setOnScroll(new EventHandler<ScrollEvent>() {
@Override
public void handle(ScrollEvent scrollEvent) {
System.out.println("Hello!");
int i = 0;
int length = table.getItems().size();
for(Node n: table.lookupAll("TableRow")) {
if (n instanceof TableRow) {
TableRow row = (TableRow) n;
if(table.getItems().get(i).getType() == "fwfx") {
row.setStyle("-fx-background-color: forestgreen;");
}
i++;
}
if(i == length) {
break;
}
}
}
}
);
Run Code Online (Sandbox Code Playgroud)
每当我启动应用程序时,它只会为可见行正确突出显示行.我发现它是因为
table.lookupAll("TableRow")
Run Code Online (Sandbox Code Playgroud)
为我返回仅17个节点的集合.虽然
table.getItems().size()
Run Code Online (Sandbox Code Playgroud)
显示正确的行数.如果我向下滚动表格,我会看到突出显示未批准的行.我迷失了一点.
所以问题是如何正确处理我的表的滚动事件?我需要处理表的所有行,而不仅仅是可见的.
如何自动打开ComboBox?
我有一个可编辑的ComboBox.我想让它自动打开,而不是强迫用户点击它.怎么做到呢?我试图做这样的事情:
testButton.fireEvent(new Event(ComboBox.ON_SHOWN));
Run Code Online (Sandbox Code Playgroud)
但它不能正常工作:在输出中我可以看到消息,它表示ON_SHOWN事件被触发,但是图形上我的comboBox仍然关闭.另外,我试过了
testButton.fireEvent(new Event(ComboBox.ON_SHOWING));
Run Code Online (Sandbox Code Playgroud)
但这根本没有反应.以及
testButton.fireEvent(new Event(ComboBoxBase.ON_SHOWING));
Run Code Online (Sandbox Code Playgroud)
和
testButton.fireEvent(new Event(ComboBoxBase.ON_SHOWN));
Run Code Online (Sandbox Code Playgroud)
PS:说打开的comboBox我的意思是这样的:

这就是我在控制器中所拥有的:
@FXML
private MediaView mediaView;
Run Code Online (Sandbox Code Playgroud)
在处理按钮按下的方法中我得到了filechooser:
File file = fileChooser.showOpenDialog(null);
if(file != null){
initPlayer(file.toURI().toString());
}
Run Code Online (Sandbox Code Playgroud)
这是方法initPlayer:
private void initPlayer (String uri) {
if (uri == null)
return;
if (mediaPlayer != null) {
mediaPlayer.stop();
mediaPlayer = null;
}
Media media = new Media(uri);
mediaPlayer = new MediaPlayer(media);
mediaPlayer.setAutoPlay(true);
mediaView = new MediaView(mediaPlayer);
mediaPlayer.setOnReady(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
}
});
}
Run Code Online (Sandbox Code Playgroud)
这是我在场景构建器中创建的视图中的代码的一部分:
<Pane layoutX="80.0" layoutY="14.0" prefHeight="480.0" prefWidth="640.0">
<MediaView fx:id="mediaView" fitHeight="480.0" fitWidth="640.0" />
</Pane>
Run Code Online (Sandbox Code Playgroud)
当我选择文件时,我听到了声音,但我看不到视频.这段代码有什么问题?我错过了什么?
似乎懒惰的属性初始化是JavaFX中常见的设计模式.例如,OpenJFX Labeled实现包含以下代码段:
public final StringProperty textProperty() {
if (text == null) {
text = new SimpleStringProperty(this, "text", "");
}
return text;
}
Run Code Online (Sandbox Code Playgroud)
鉴于可以想象从JavaFX UI线程以及其他潜在客户端线程访问该属性,并且此实现不是线程安全的,这似乎是一个错误.鉴于模式的使用频率,这是一个非常严重的问题,或者访问控件上的属性并不是为了线程安全(我误解了JavaFX并发策略).
任何人都可以解释不使懒惰初始化线程安全的理由吗?
我试图在JavaFx上更改ComboBox字体,所以我有:
ComboBox cbCategoria = new ComboBox();
我是javaFx的新手,所以一些示例代码会很棒:D,是没有CSS的方法吗?如果不能如何使用CSS,我还没有学会如何使用CSS样式:(
我是JavaFX的新手.我创建了这个简单的菜单.
MenuBar menuBar = new MenuBar();
// File menu - new, save, exit
Menu menu = new Menu("File");
menu.getItems().add(new MenuItem("New"));
menu.getItems().add(new MenuItem("Save"));
menu.getItems().add(new SeparatorMenuItem());
menu.getItems().add(new MenuItem("Exit"));
menuBar.getMenus().add(menu);
// Options menu - Preferences
Menu options = new Menu("Options");
options.getItems().add(new MenuItem("Preferences"));
menuBar.getMenus().add(options);
// Help menu - About
Menu help = new Menu("Help");
help.getItems().add(new MenuItem("About"));
menuBar.getMenus().add(help);
menuBar.prefWidthProperty().bind(primaryStage.widthProperty());
root.getChildren().add(menuBar);
primaryStage.setScene(scene);
primaryStage.show();
}
Run Code Online (Sandbox Code Playgroud)
你能告诉我当我点击菜单时如何调用Java方法吗?刚开始时我想点击这个Java方法Exit.
public void programExit(){
System.exit(0);
}
Run Code Online (Sandbox Code Playgroud) 我的一个屏幕上有一个奇怪的问题,我甚至不知道在哪里看.我在数据库中查找项目并在单独的屏幕(不是实际屏幕,容器)中显示它们的详细信息.
奇怪的是,该程序与大多数项目完美配合,但在某些情况下,它永远不会有效.堆栈跟踪并没有真正帮助我,因为它们都不属于我的源代码.
各位同事,你对这个问题有什么想法或暗示吗?
java.lang.NullPointerException
at com.sun.javafx.scene.control.skin.ComboBoxListViewSkin.getIndexOfComboBoxValueInItemsList(ComboBoxListViewSkin.java:444)
at com.sun.javafx.scene.control.skin.ComboBoxListViewSkin.updateDisplayNode(ComboBoxListViewSkin.java:392)
at com.sun.javafx.scene.control.skin.ComboBoxListViewSkin.getDisplayNode(ComboBoxListViewSkin.java:229)
at com.sun.javafx.scene.control.skin.ComboBoxBaseSkin.updateDisplayArea(ComboBoxBaseSkin.java:125)
at com.sun.javafx.scene.control.skin.ComboBoxBaseSkin.computePrefHeight(ComboBoxBaseSkin.java:180)
at javafx.scene.Parent.prefHeight(Parent.java:879)
at javafx.scene.layout.Region.prefHeight(Region.java:1384)
at javafx.scene.control.Control.computePrefHeight(Control.java:804)
at javafx.scene.Parent.prefHeight(Parent.java:879)
at javafx.scene.control.Control.prefHeight(Control.java:686)
at javafx.scene.layout.Region.computeChildPrefAreaHeight(Region.java:1599)
at javafx.scene.layout.Region.getMaxAreaHeight(Region.java:1721)
at javafx.scene.layout.Region.computeMaxPrefAreaHeight(Region.java:1689)
at javafx.scene.layout.HBox.computePrefHeight(HBox.java:394)
at javafx.scene.Parent.prefHeight(Parent.java:879)
at javafx.scene.layout.Region.prefHeight(Region.java:1384)
at javafx.scene.layout.Region.computeChildPrefAreaHeight(Region.java:1599)
at javafx.scene.layout.VBox.getAreaHeights(VBox.java:394)
at javafx.scene.layout.VBox.computePrefHeight(VBox.java:373)
at javafx.scene.Parent.prefHeight(Parent.java:879)
at javafx.scene.layout.Region.prefHeight(Region.java:1384)
at javafx.scene.layout.Region.computeChildPrefAreaHeight(Region.java:1599)
at javafx.scene.layout.Region.getMaxAreaHeight(Region.java:1721)
at javafx.scene.layout.Region.computeMaxPrefAreaHeight(Region.java:1689)
at javafx.scene.layout.HBox.computePrefHeight(HBox.java:394)
at javafx.scene.Parent.prefHeight(Parent.java:879)
at javafx.scene.layout.Region.prefHeight(Region.java:1384)
at javafx.scene.layout.Region.computeChildPrefAreaHeight(Region.java:1599)
at javafx.scene.layout.Region.getMaxAreaHeight(Region.java:1721)
at javafx.scene.layout.Region.computeMaxPrefAreaHeight(Region.java:1693)
at javafx.scene.layout.StackPane.computePrefHeight(StackPane.java:320)
at javafx.scene.Parent.prefHeight(Parent.java:879)
at javafx.scene.layout.Region.prefHeight(Region.java:1384)
at com.sun.javafx.scene.control.skin.ScrollPaneSkin.computeScrollNodeSize(ScrollPaneSkin.java:874)
at com.sun.javafx.scene.control.skin.ScrollPaneSkin.layoutChildren(ScrollPaneSkin.java:753)
at javafx.scene.Parent.layout(Parent.java:1018)
at javafx.scene.Parent.layout(Parent.java:1028)
at javafx.scene.Parent.layout(Parent.java:1028) …Run Code Online (Sandbox Code Playgroud) javafx-2 ×10
java ×5
javafx ×3
combobox ×2
fxml ×2
fonts ×1
media-player ×1
scene ×1
scenebuilder ×1
stage ×1