标签: javafx-2

JavaFX定期后台任务

我尝试定期在JavaFX应用程序后台线程中运行,这会修改一些GUI属性.

我想我知道如何使用TaskService类,javafx.concurrent并且无法弄清楚如何在不使用Thread#sleep()方法的情况下运行这样的周期性任务.如果我可以使用一些Executor来自Executors制造方法(Executors.newSingleThreadScheduledExecutor())会很好

我试图Runnable每5秒运行一次,重启javafx.concurrent.Service但它会立即挂起,service.restart甚至service.getState()被调用.

所以最后我使用Executors.newSingleThreadScheduledExecutor(),它Runnable每隔5秒发射一次并使用以下命令Runnable运行另一个Runnable:

Platform.runLater(new Runnable() {
 //here i can modify GUI properties
}
Run Code Online (Sandbox Code Playgroud)

它看起来非常讨厌:(有没有更好的方法来使用TaskService类?

javafx-2

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

访问FXML控制器类

我想随时与FXML控制器类进行通信,以便从主应用程序或其他阶段更新屏幕上的信息.

这可能吗?我还没有找到任何办法.

静态函数可能是一种方式,但它们无法访问表单的控件.

有任何想法吗?

javafx-2 fxml

58
推荐指数
3
解决办法
8万
查看次数

JavaFX 2.1:工具包未初始化

我的应用程序是基于Swing的.我想介绍JavaFX并将其配置为在辅助显示器上呈现场景.我可以使用JFrame来保存一个可以容纳JFXPanel的JFXPanel,但我想用JavaFX API实现这个目的.

子类化com.sun.glass.ui.Application并使用Application.launch(this)不是一个选项,因为调用线程将被阻止.

从Swing EDT实例化一个舞台时,我得到的错误是:

java.lang.IllegalStateException: Toolkit not initialized
Run Code Online (Sandbox Code Playgroud)

有什么指针吗?


编辑:结论

问题:非平凡的Swing GUI应用程序需要运行JavaFX组件.应用程序的启动过程在启动从属服务层后初始化GUI.

解决方案

子类JavaFX Application类并在单独的线程中运行它,例如:

public class JavaFXInitializer extends Application {
    @Override
    public void start(Stage stage) throws Exception {
        // JavaFX should be initialized
        someGlobalVar.setInitialized(true);
    }
}
Run Code Online (Sandbox Code Playgroud)

旁注:因为Application.launch()方法接受一个Class<? extends Application>参数,所以必须使用全局变量来表示JavaFX环境已被初始化.

替代方法:在Swing Event Dispatcher Thread中实例化JFXPanel:

final CountDownLatch latch = new CountDownLatch(1);
SwingUtilities.invokeLater(new Runnable() {
    public void run() {
        new JFXPanel(); // initializes JavaFX environment
        latch.countDown();
    }
});
latch.await();
Run Code Online (Sandbox Code Playgroud)

通过使用此方法,调用线程将等待,直到设置JavaFX环境.

选择您认为合适的解决方案.我选择了第二个,因为它不需要一个全局变量来表示JavaFX环境的初始化,也不会浪费一个线程.

javafx-2

56
推荐指数
4
解决办法
6万
查看次数

Javafx 2单击并双击

我想知道是否有可能检测到JavaFX 2中的双击?如何 ?

我想在点击和双击之间进行不同的事件.

谢谢

java javafx click double-click javafx-2

53
推荐指数
2
解决办法
6万
查看次数

为什么我在JavaFX上得到java.lang.IllegalStateException"不在FX应用程序线程上"?

我有一个TableView具有附加侦听器的应用程序,因此一旦检测到更改就会刷新,但问题是我得到了java.lang.IllegalStateException: Not on FX application thread; currentThread = Smack Listener Processor (0).这是我的代码:

/**
 * This function resets the pagination pagecount
 */
public void resetPage() {
    try {
        System.out.println("RESET"); 
        int tamRoster = this.loginManager.getRosterService().getRosterList().size();
        paginationContactos.setPageCount((int)(Math.ceil(tamRoster*1.0/limit.get())));
        int tamEnviados = this.loginManager.getRosterService().getEnviadasList().size();
        paginationEnviadas.setPageCount((int)(Math.ceil(tamEnviados*1.0/limit.get())));
        int tamRecibidas = this.loginManager.getRosterService().getRecibidasList().size();
        paginationRecibidas.setPageCount((int)(Math.ceil(tamRecibidas*1.0/limit.get())));
    } catch (Exception e) {
        e.printStackTrace();
    }
}

public void doSomething () {
        this.loginManager.getRosterService().getRosterList().addListener(new ListChangeListener<RosterDTO>() {
            @Override
            public void onChanged(
                    javafx.collections.ListChangeListener.Change<? extends RosterDTO> c) {
                // TODO Auto-generated method stub
                resetPage();
                while (c.next()) …
Run Code Online (Sandbox Code Playgroud)

java smack javafx-2

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

JavaFX中的AutoComplete ComboBox

我正在寻找一种向JavaFX添加自动完成功能的方法ComboBox.在搜索了很多之后,是时候在这里问了一下.

AutoFillBox是众所周知的,但不是我正在搜索的内容.我想要的是一个可编辑的组合框,输入列表时应该过滤掉.但是我也希望打开列表而不打字并查看整个项目.

任何的想法?

java combobox autocomplete javafx-2 javafx-8

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

面板内的JavaFX Panel自动调整大小

我有一个只有一个FXML文件的JavaFX应用程序.在这个文件中,我有一个AnchorPane,里面有一个StackPane.这是截图:

我的面板面板应用程序

当我启动此应用程序时,我想使用AnchorPane自动调整StackPane的大小.从而; StackPane将自动获得当前可用的宽度和高度.在我调整应用程序大小的那一刻,AnchorPane正在自动调整大小,但StackPane保持固定大小.

如何自动调整StackPane的大小并使其在父面板中完全拉伸?

我的守则

Main.java

package app;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class Main extends Application {

  public static void main(String[] args) {
      Application.launch(args);
  }

  @Override
  public void start(Stage stage) throws Exception {
      Parent root = FXMLLoader.load(getClass().getResource("Main.fxml"));
      Scene scene = new Scene(root,800,600);
      scene.getStylesheets().add(this.getClass().getResource("/app/style1.css").toExternalForm());
      stage.setScene(scene);
      stage.show();
  }
}
Run Code Online (Sandbox Code Playgroud)

MainController.java

package app;

import java.net.URL;
import java.util.ResourceBundle;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.StackPane;

public class MainController implements Initializable {

   @FXML
   private AnchorPane anchorPane;
   @FXML …
Run Code Online (Sandbox Code Playgroud)

css java pane javafx-2 fxml

45
推荐指数
3
解决办法
10万
查看次数

如何在onfocus和outfocus上对javaFX TextField执行任务?

我正在研究JavaFX项目.我需要在JavaFX上执行一些任务TextField.

例如,TextField我要打印的"焦点上"事件

System.out.println("Textfield on focus");
Run Code Online (Sandbox Code Playgroud)

它应该打印出"焦点"事件

System.out.println("Textfield out focus");
Run Code Online (Sandbox Code Playgroud)

java javafx javafx-2 javafx-8

45
推荐指数
3
解决办法
5万
查看次数

JavaFX TabPane:如何设置选定的选项卡

我有一个带有JavaFX 2的Java桌面应用程序,在我的FX中我有一个TabPane.我想设置默认选项卡.换句话说,我想将选项卡设置为选中.我发现有多种方法可以找出哪个选项卡被选中,setSelectionModel()但我找不到如何使用它.

TabPane tabPane = new TabPane();

Tab tab0 = new Tab("blue");
tab.setContent(new Rectangle(200,200, Color.BLUE));

Tab tab1 = new Tab("green");
tab.setContent(new Rectangle(200,200, Color.GREEN));

tabPane.getTabs().addAll(tab0, tab1);
Run Code Online (Sandbox Code Playgroud)

java tabs selecteditem javafx-2

44
推荐指数
2
解决办法
5万
查看次数

JavaFX 2自动列宽

我有一个显示人员联系方式的JavaFX 2表,让我们想象有三列:名字,姓氏和电子邮件地址.当我的应用程序启动时,它会在表格中填入几行有关系统中已有人员的数据.

问题是列宽都是一样的.大多数情况下,名字和姓氏都会完整显示,但电子邮件地址会被剪裁.用户可以双击标题中的分隔符来调整列的大小,但这将很快变得乏味.

一旦预先填充了表,我想以编程方式调整所有列的大小以显示它们包含的数据,但我无法弄清楚如何实现这一点.我可以看到我可以打电话,col.setPrefWidth(x)但这并没有真正帮助,因为我必须猜测宽度.

javafx-2

43
推荐指数
2
解决办法
5万
查看次数