标签: javafx

右键单击JavaFX?

如何在JavaFX中检测/处理右键单击?

javafx javafx-1

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

如何通过调整组件大小来绑定舞台大小调整?

我有一个带FXML的JavaFX 2.0应用程序.我希望在调整带有应用程序的窗口时调整组件(TextFields,ComboBoxes,layouts等)的大小.所以...

使用JavaFX构建GUI应用程序时,您会注意到API中的某些类已经实现了属性.例如,javafx.scene.shape.Rectangle类包含的属性arcHeight,arcWidth,height,width,x,和y.对于这些属性中的每一个,将存在与先前描述的约定匹配的对应方法.例如getArcHeight(),setArcHeight(double),arcHeightProperty(),它们共同表明(对开发人员和工具)给定的属性存在.*

  • 要将监听器添加到舞台,我必须执行以下操作:

       stage.resizableProperty().addListener(new ChangeListener<Boolean>(){
        @Override
        public void changed(ObservableValue<? extends Boolean> arg0, Boolean arg1, Boolean arg2){
            throw new UnsupportedOperationException("Not supported yet.");
        }
    
    });
    
    Run Code Online (Sandbox Code Playgroud)

所以有两个问题:

  • 要进行一些绑定,我必须在控制器类中获得我的舞台.那么 - 我怎样才能在控制器类中获得一个阶段?
  • 它看起来像UI控件没有任何width\height属性,绑定到某些东西.或许我还没找到它们.

那么,我该如何解决我的问题呢?

UPD.关于Scene Builder到Sergey Grinev:当我在我的组件上使用 Ctrl + K(告诉它占据其父组件的整个区域)时 - 一切正常.

但是如果我想告诉我的组件占据50%的面积呢?例如,我有一个带有两个VBox的标签.标签的宽度为100px.Vbox的宽度分别为50px.VBox1的x1 = 0,x2 = 50,VBox2的x1 …

javafx javafx-2 fxml

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

Java视图的可用性属性超出了GUI视图的范围

在使用JavaFX(Java8)工作一段时间之后,我发现Properties的概念非常有用,允许使用bean兼容变量绑定以使用计算树更新更改,例如:

class Person {
    StringProperty name;
    ...
}
Run Code Online (Sandbox Code Playgroud)
Person owner;
Person human;

owner.name().bind(human.name());
Run Code Online (Sandbox Code Playgroud)

这允许将GUI控件绑定到"模型",以自动更新更改.

所以我也开始Property<T>在模型中使用该类(我的数据对象正在进行我的功能操作).但JavaFX是一个单线程GUI实现,只有在JavaFX线程中完成时,才允许设置链接到某些GUI控件的属性.否则将抛出异常:

  Exception in thread "Thread-5" java.lang.IllegalStateException: Not on FX application thread; currentThread = Thread-5
Run Code Online (Sandbox Code Playgroud)

如果我现在开始编写多线程代码,我终于无法使用这些属性,即使我愿意.我无法承担将Platform.runLater()调用中的每个更改封装到JavaFX线程中的能力.

为什么JavaFX不提供线程安全的Property-Binding?(或者是吗?)

javafx

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

实现JavaFX应用程序自动更新功能

我即将编写一个新的跨平台应用程序,我选择JavaFX,主要是因为它丰富的UI库(标准和第三方)和它的本机数据绑定功能.我的应用程序将通过本机打包部署,因为缺少PPAPI Java插件(Chrome将停止Chrome 42中的NPAPI,现在处于测试阶段),这会阻止Chrome用户使用WebStart,并且因为更"经典"用户体验,因此WebStart和自动更新不在桌面上.

方案如下:

  1. 应用程序启动并检查更新
  2. 如果找到更新,请下载它们并将它们放在临时文件夹中
  3. 在应用程序关闭时,将新下载的JAR文件写入旧文件
  4. 自动重启更新的应用程序

然而,在我的脑海中出现了一些问题(最初这两个问题,但我可以在我有更多时更新这个问题):

  • 这样做是否安全?如果我覆盖应用程序生命周期中已经使用过的一些JAR,我是否冒险以某种方式让JVM变得疯狂?
  • 我很难找到一种方法来自动重启我的JavaFX应用程序.它甚至可能吗?

谢谢大家的帮助.

java javafx auto-update javafx-8

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

JavaFx - SceneBuilder中的Tab键顺序

如何为元素设置Tab键顺序(焦点顺序),例如SceneBuilder中的文本字段?

java javafx

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

JavaFx:按钮边框和悬停

我使用的是Java 8.我有工具栏和按钮.

我想实现以下内容:

  • 在工具栏上的通常状态(没有鼠标悬停)时,只能看到按钮标签(没有背景,也没有边框).
  • 当用户鼠标悬停在按钮上时,必须看到常用按钮.

怎么做通过CSS?

css java javafx java-8

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

JavaFx将文件拖放到程序中

嘿,社区我想知道是否有可能创建一个程序,允许用户从硬盘驱动器(桌面,文档文件夹,视频文件夹)的任何位置拖动文件,并将其放入程序的窗口.

我正在创建一个媒体播放器,我希望能够通过将MP4拖放到窗口中来播放视频.我是否需要将文件存储在变量中,或者只将文件的位置存储到变量中.此外,重要的是我保持对跨平台的支持.

我正在使用JavaFx与java 7更新79 jdk.

提前致谢.

java javafx media-player java-7 java-8

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

如何在JavaFX中监听Stage的resize事件?

我想在表单的resize事件(Scene或者Stage不管它是什么)上执行一些功能.

但是如何在JavaFX中检测表单的resize事件?

java javafx properties listener javafx-8

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

我可以使用JavaFX向程序中添加更多开始菜单项吗?

我正在使用JavaFX Gradle插件来构建我的JavaFX应用程序.是否可以在完成的安装程序中添加多个开始菜单项?

java windows javafx gradle javafx-gradle-plugin

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

无法访问类 com.sun.javafx.util.Utils(在模块 javafx.graphics 中)-JavaFX 和 Eclipse

我已按照本指南将 JavaFX 设置到 Linux 机器上。首先我已经安装了 Java 11

asus@asus-pc:/usr/share/openjfx/lib$ java -version
openjdk version "11.0.3" 2019-04-16
OpenJDK Runtime Environment (build 11.0.3+7-Ubuntu-1ubuntu219.04.1)
OpenJDK 64-Bit Server VM (build 11.0.3+7-Ubuntu-1ubuntu219.04.1, mixed
mode, sharing)
asus@asus-pc:/usr/share/openjfx/lib$ 
Run Code Online (Sandbox Code Playgroud)

然后我从命令安装了 OpenJFX sudo apt-get install openjfx

 asus@asus-pc:/usr/share/openjfx/lib$ ls
 javafx.base.jar      javafx.graphics.jar  javafx.swing.jar
 javafx.controls.jar  javafx.media.jar     javafx.web.jar
 javafx.fxml.jar      javafx.properties    src.zip
 asus@asus-pc:/usr/share/openjfx/lib$ 
Run Code Online (Sandbox Code Playgroud)

然后在 Eclipse 中创建了一个库。

在此处输入图片说明

然后我将它包含到我的 java 项目中。我尝试运行此代码:

package se.danielmartensson.start;

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{

    /*
     * Start the start(Stage front)
     */
    public …
Run Code Online (Sandbox Code Playgroud)

java javafx scenebuilder gluon-desktop

16
推荐指数
4
解决办法
2万
查看次数