标签: javafx-2

Application和Controller类之间的JavaFX FXML通信

我试图通过我的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)

processbuilder javafx-2 fxml

1
推荐指数
1
解决办法
1万
查看次数

如何在javafx 2.1中在Stage前面显示java swing组件?

我在javafx应用程序中使用JFileChooser,Joption等swing组件.但是当我点击JFilechooser时,这就是应用程序的幕后黑手.如何解决这个问题呢.请给我一些建议.提前致谢.

javafx javafx-2

1
推荐指数
1
解决办法
406
查看次数

基于javafx和fxml的透明背景

有许多方法可以将窗格或背景场景的背景设置为透明.

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,而在它上面有一些其他窗格.我如何实际将白色背景变为透明或半透明?

java stage scene javafx-2 fxml

1
推荐指数
1
解决办法
3842
查看次数

JavaFX滚动事件处理TableView

我的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)

显示正确的行数.如果我向下滚动表格,我会看到突出显示未批准的行.我迷失了一点.

所以问题是如何正确处理我的表的滚动事件?我需要处理表的所有行,而不仅仅是可见的.

javafx-2

1
推荐指数
1
解决办法
6669
查看次数

如何使JavaFX可编辑的comboBox打开?

如何自动打开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我的意思是这样的:

combobox javafx-2

1
推荐指数
1
解决办法
2765
查看次数

JavaFX - 使用mediaplayer和mediaview播放视频

这就是我在控制器中所拥有的:

@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)

当我选择文件时,我听到了声音,但我看不到视频.这段代码有什么问题?我错过了什么?

java media-player javafx-2 scenebuilder

1
推荐指数
1
解决办法
1万
查看次数

JavaFX中属性的延迟初始化

似乎懒惰的属性初始化是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并发策略).

任何人都可以解释不使懒惰初始化线程安全的理由吗?

java javafx javafx-2

1
推荐指数
1
解决办法
537
查看次数

设置JavaFx ComboBox字体?

我试图在JavaFx上更改ComboBox字体,所以我有:

ComboBox cbCategoria = new ComboBox();

我是javaFx的新手,所以一些示例代码会很棒:D,是没有CSS的方法吗?如果不能如何使用CSS,我还没有学会如何使用CSS样式:(

fonts combobox javafx-2

1
推荐指数
1
解决办法
7701
查看次数

如何在JavaFX菜单中调用Java方法

我是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 javafx javafx-2

1
推荐指数
1
解决办法
944
查看次数

JavaFX ComboBox API中的NullPointerException

我的一个屏幕上有一个奇怪的问题,我甚至不知道在哪里看.我在数据库中查找项目并在单独的屏幕(不是实际屏幕,容器)中显示它们的详细信息.

奇怪的是,该程序与大多数项目完美配合,但在某些情况下,它永远不会有效.堆栈跟踪并没有真正帮助我,因为它们都不属于我的源代码.

各位同事,你对这个问题有什么想法或暗示吗?

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)

java javafx-2

1
推荐指数
1
解决办法
1983
查看次数