标签: javafx

JavaFX:如何在初始化期间从控制器获取阶段?

我想从我的控制器类处理阶段事件(即隐藏).所以我要做的就是通过添加一个监听器

((Stage)myPane.getScene().getWindow()).setOn*whatIwant*(...);
Run Code Online (Sandbox Code Playgroud)

但问题是初始化刚刚开始

Parent root = FXMLLoader.load(getClass().getResource("MyGui.fxml"));
Run Code Online (Sandbox Code Playgroud)

之前

Scene scene = new Scene(root);
stage.setScene(scene);
Run Code Online (Sandbox Code Playgroud)

因此.getScene()返回null.

我自己找到的唯一解决方法是向myPane.sceneProperty()添加一个监听器,当它变为非null时,我得到场景,添加到它的.windowProperty()我的!该死!我最终检索阶段的监听器处理.这一切都以设置所需的听众来举办舞台活动而告终.我认为听众太多了.这是解决我问题的唯一方法吗?

javafx initialization stage javafx-2 javafx-8

83
推荐指数
4
解决办法
12万
查看次数

为什么JavaFX不包含在Ubuntu Wily(15.10)的OpenJDK 8中?

我今天已经下载了OpenJDK 8 sudo apt-get install openjdk-8-jdk,似乎JavaFX不包含在其中.

> java -version
openjdk version "1.8.0_66-internal"
OpenJDK Runtime Environment (build 1.8.0_66-internal-b17)
OpenJDK Server VM (build 25.66-b17, mixed mode)
Run Code Online (Sandbox Code Playgroud)

我也在最新的Eclipse(Eclipse Mars)中安装了E(fx)clipse,但我仍然得到消息javafx无法解析.

java eclipse ubuntu javafx

81
推荐指数
2
解决办法
10万
查看次数

在JRE 8中使用JavaFX,"访问限制"错误

当我在新的java 8项目中尝试使用与javafx相关的类时,我从eclipse中获得了访问限制错误.到目前为止,我能找到的唯一"解决方案"是告诉eclipse忽略访问限制,但我对此并不满意.错误的一个例子:

Access restriction: The type Pane is not accessible due to 
restriction on required library C:\Program Files\Java\jre8_0\lib\ext\jfxrt.jar
Run Code Online (Sandbox Code Playgroud)

我正在使用Eclipse Kepler和Java 8的Eclipse JDT补丁.

这似乎是与JavaFX不是JavaSE执行环境的一部分有关的问题.

我现在很困惑,因为根据http://en.wikipedia.org/wiki/JavaFX,javaFX是JavaSE的一部分.是否有可能Eclipse没有认识到它是javaSE的一部分?

java eclipse javafx java-8

78
推荐指数
6
解决办法
9万
查看次数

77
推荐指数
10
解决办法
12万
查看次数

JavaFX中的Platform.runLater和Task

我一直在研究这个问题,但至少我还是非常困惑.

谁能给我一个何时使用Task和何时使用的具体例子Platform.runLater(Runnable);?究竟有什么区别?什么时候使用其中任何一个是否有黄金法则?

如果我错了也不纠正我,但这两个"对象"不是在GUI中用于更新GUI的主线程内创建另一个线程的方法吗?

java user-interface multithreading javafx task

76
推荐指数
3
解决办法
13万
查看次数

为什么javafx会破坏我的半透明游标?

以下是两张PNG图片:

在此输入图像描述 在此输入图像描述

在视觉上它们完全相同 - 唯一的区别是在某些像素中有一个半透明背景(您可以下载图像进行检查).

但是当我在JavaFX节点上使用这些图像作为图像光标时,我得到以下结果:

在此输入图像描述 在此输入图像描述

第一个光标(没有部分透明像素)仍然很清晰,但第二个光标变形.

在与问题斗争了一段时间之后,我发现了解决这种差异的算法 - 混合模式:

  • "预期"方式(例如,您可以在此浏览器中看到)是获取每个通道的值之和,按Alpha值加权:(1 - alpha) * background_color + alpha * foreground_color.

  • "JavaFX Cursor"给出了不同的公式:( (1 - alpha) * background_color + alpha^2 * foreground_color注意方形).

我发现了失真,但我无法弄清楚我做错了什么以及如何纠正这个问题.

这是我测试程序的完整可运行源代码:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
import javafx.scene.ImageCursor;
import javafx.scene.image.Image;

public class HelloWorld extends Application {

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

    @Override
    public void start(Stage primaryStage) {
        System.out.println(ImageCursor.getBestSize(32, 32));

        primaryStage.setTitle("Hello World!");

        StackPane root = new StackPane();
        root.setCursor(new ImageCursor(new Image("/test-cursor.png"), …
Run Code Online (Sandbox Code Playgroud)

java javafx

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

JavaFX - setVisible不会"隐藏"该元素

在JavaFX中,如果我有一个包含2个VBox元素的场景,并且每个元素VBox都有多个元素Label.
如果我将顶部设置VBox隐形,为什么底部VBox 不会移动到顶部的场景VBox

VBox看不见的,但我希望其他对象移动到它的位置.

我正在使用FXML来加载我的控件.

java javafx javafx-2 fxml javafx-8

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

我所有的JavaFX TextField都有行

所以,在JavaFX上磨牙,到目前为止事情正在顺利进行.

但是,所有文本字段都有一条线穿过它们,从顶部开始大约10px.

不仅在我的应用程序中,而且在SceneBuilder应用程序中也是如此.

注意,我没有使用任何显式CSS,我不知道SceneBuilder使用什么.屏幕截图来自SceneBuilder,我的屏幕看起来完全相同.

JavaFX TextFields

所以,这是基本的东西.

java -version
java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)
Run Code Online (Sandbox Code Playgroud)

Mac OS 10.9.5上

只是好奇,如果有人看到这个并有一个建议.

编辑:我下载了样本,这显然与Modena主题有关.Caspian主题看起来很好.以下是Modena.jar TextFields部分的屏幕截图.有趣的是,它TextArea遇到了类似的问题,尽管并不像普遍的那样普遍TextField.

Modena.jar截图

更多附录:

人们一直在争吵,所以这就是.我基本上只是遵循这个:https://docs.oracle.com/javafx/2/get_started/form.htm并使用默认的Netbeans 8.0.2 JavaFX应用程序项目.只需从网站上剪切并粘贴即可.

public class Fxlinetest extends Application {

    @Override
    public void start(Stage primaryStage) {
        primaryStage.setTitle("JavaFX Welcome");

        GridPane grid = new GridPane();
        grid.setAlignment(Pos.CENTER);
        grid.setHgap(10);
        grid.setVgap(10);
        grid.setPadding(new Insets(25, 25, 25, 25));

        Text scenetitle = new Text("Welcome");
        scenetitle.setFont(Font.font("Tahoma", FontWeight.NORMAL, 20));
        grid.add(scenetitle, …
Run Code Online (Sandbox Code Playgroud)

java textbox javafx

72
推荐指数
2
解决办法
1878
查看次数

如何关闭窗口关闭JavaFX应用程序?

在Swing中,您只需setDefaultCloseOperation()在窗口关闭时关闭整个应用程序即可.

但是在JavaFX中我找不到相应的东西.我打开了多个窗口,如果窗口关闭,我想关闭整个应用程序.在JavaFX中这样做的方法是什么?

编辑:

我明白我可以覆盖setOnCloseRequest()在窗口关闭时执行一些操作.问题是应该执行什么操作来终止整个应用程序?

stage.setOnCloseRequest(new EventHandler<WindowEvent>() {
    @Override
    public void handle(WindowEvent event) {
        stop();
    }
});
Run Code Online (Sandbox Code Playgroud)

类中stop()定义的方法Application什么都不做.

java javafx javafx-2 javafx-8

70
推荐指数
4
解决办法
13万
查看次数

JavaFX FXML控制器 - 构造函数与初始化方法

我的Application班级看起来像这样:

public class Test extends Application {

    private static Logger logger = LogManager.getRootLogger();

    @Override
    public void start(Stage primaryStage) throws Exception {

        String resourcePath = "/resources/fxml/MainView.fxml";
        URL location = getClass().getResource(resourcePath);
        FXMLLoader fxmlLoader = new FXMLLoader(location);

        Scene scene = new Scene(fxmlLoader.load(), 500, 500);

        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}
Run Code Online (Sandbox Code Playgroud)

通过先调用默认构造函数然后调用方法,FXMLLoader创建相应控制器的实例(在FXML文件via中给出fx:controller)initialize:

public class MainViewController {

    public MainViewController() {
        System.out.println("first");
    }

    @FXML
    public void initialize() {
        System.out.println("second");
    } …
Run Code Online (Sandbox Code Playgroud)

java javafx

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