标签: javafx

JavaFx将文件拖放到程序中

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

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

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

提前致谢.

java javafx media-player java-7 java-8

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

无法访问类 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万
查看次数

JavaFX HTML样式(或等效)标签

在Swing中,使用HTML设置JLabel的样式非常简单 - 您只需使用您想要的HTML作为标签的文本,并且它被适当地呈现.

在JavaFX中,这不可用,但我们可以使用该setStyle()方法设置特定标签(或一般节点)的样式.

但是,使用这种方法,如何将标签的一部分设置为某种样式并不明显,例如相当于:

JLabel label = new JLabel("<html>Part of this <b>text is b</b>old and part isn't.</html>");
Run Code Online (Sandbox Code Playgroud)

实现上述目标的最简单方法是什么?

styles javafx javafx-2

15
推荐指数
2
解决办法
2772
查看次数

JavaFX正确缩放

我想在滚动事件上缩放窗格中的所有节点.

到目前为止我尝试了什么:

  1. 当我执行scaleX或scaleY时,窗格的边框分别缩放(在设置窗格样式时看到-fx-border-color: black;).因此,如果我不是从窗格的边界开始,并非每个事件都会启动,所以我需要它.在此输入图像描述

  2. 下一步我试图扩展每个节点,结果非常糟糕,就像这样 - (通过点延伸的线条).或者如果在另一侧滚动,则会更少在此输入图像描述

  3. 我尝试的另一种方法是缩放Node的点.它更好,但我不喜欢它.它看起来 point.setScaleX(point.getScaleX()+scaleX)和y和其他节点适当.

javafx scale

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

JavaFX TabPane:如何监听选择更改

当用户从一个选项卡转到另一个选项卡时,我想做一些操作,因为我使用Scene Builder进行了表单设计我不能使用这里提到的代码(他使用了TabPaneBuilder类)

我猜这个代码可以工作,但它不会对选项卡选择更改做出反应.

@FXML
protected TabPane chatTabs;
.
.    
.
chatTabs.selectionModelProperty().addListener(
    new ChangeListener<SingleSelectionModel<Tab>> {
            @Override
            public void changed(ObservableValue<? extends SingleSelectionModel<Tab>> ov, SingleSelectionModel<Tab> t, SingleSelectionModel<Tab> t1) {
                System.err.println("changed");
            }
        }
    }
);
Run Code Online (Sandbox Code Playgroud)

java javafx listener propertychangelistener

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

JavaFX中与ObjectBinding的双向绑定

我有一个简单的bean,它有一些相互关联的属性.例如,这个bean有一个叫做discountRate的属性,另一个叫做discountValue.discountRate是应用于销售的折扣百分比(%).discountValue是应用于销售的折扣价值($).由于用户可以通知百分比或值,并且我需要在数据库中存储这两个值,因此JavaFX双向绑定可以解决问题,但是,正如您可以想象的那样,这些值是相关的但不相同.我尝试解决这个问题,在双方创建绑定:

public class ExampleBean{

    private ObjectProperty<BigDecimal> discountValue;
    private ObjectProperty<BigDecimal> discountRate;

    public BigDecimal getDiscountvalue() {
        return discountValueProperty().getValue();
    }

    public void setDiscountValue(BigDecimal discountvalue) {
        this.discountValueProperty().set(discountvalue);
    }

    public ObjectProperty<BigDecimal> discountValueProperty() {
        if(discountValue==null){
            discountValue=new SimpleObjectProperty<BigDecimal>(new BigDecimal("0.00"));
            discountRate=new SimpleObjectProperty<BigDecimal>(new BigDecimal("0.00"));
            configureDiscountBinding();
        }
        return discountValue;
    }

    private void configureDiscountBinding(){
        discountValue.bind(Bindings.createObjectBinding(new Callable<BigDecimal>() {
            @Override
            public BigDecimal call() throws Exception {
                return getDiscountRate().multiply(getTotalValue()).divide(new BigDecimal("100"));
            }
        }, discountRateProperty()));
        discountRate.bind(Bindings.createObjectBinding(new Callable<BigDecimal>() {
            @Override
            public BigDecimal call() throws Exception {
                return getDiscountValue().multiply(new BigDecimal("100")).divide(getTotalValue());
            }
        }, discountValueProperty()));
    } …
Run Code Online (Sandbox Code Playgroud)

java data-binding javafx javafx-2

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

如何在Android上运行JavaFX

我尝试在Android上运行一个简单的JavaFX应用程序.因此,我使用gradle来阅读javafxports入门指南来构建应用程序,但我被困在某个地方.我可以使用installDebugEclipse中的gradle任务在Android设备上构建和安装应用程序,但是,当我启动应用程序时,我得到一个黑屏.当我解压缩.apk文件时,它不包含JavaFX应用程序的jar文件.我假设apk应该包含JavaFX应用程序jar文件,但我不知道如何将其包含在.apk.

我还尝试使用gradle来构建JavaFX应用程序本身(jar文件),这很好.但是,我不知道把这个jar文件放在哪里可以包含在apk文件中.我读过我要把它放到一个dist目录中,但我认为这只会在Netbeans中使用吗?我正在使用Eclipse gradle集成来构建项目.

这是我试过的.由于JavaFX应用程序就像HelloWorld示例应用程序一样简单,并且像魅力一样工作,我希望在我的gradle构建文件中出现配置错误.

build.gradle - 构建apk

apply plugin: 'me.tatarka.retrolambda'
apply plugin: 'android'

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'me.tatarka:gradle-retrolambda:2.5.0'
        classpath 'com.android.tools.build:gradle:1.0.1'
    }
}
repositories {
    jcenter()
}
ext {
    dalvikSdkHome = getProjectProperty('dalvikSDK')
    dalvikSdkLib = dalvikSdkHome + '/rt/lib'
}

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.1"
    dexOptions {
        preDexLibraries = false
    }
    sourceSets {
        main {
            jniLibs.srcDir file("${dalvikSdkLib}/")
            assets.srcDirs = ['assets']
        }
    }
    lintOptions {
        abortOnError false
    } …
Run Code Online (Sandbox Code Playgroud)

android javafx gradle javafxports

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

触发事件时自发的NullPointerExceptions

我目前正在与LWJGL库结合使用JavaFX Level Editor,以实现OpenGL功能,从而使用多线程.

然而,我的问题是,有时当我触发JavaFX事件时(当我按下按钮/键等时),我得到了这种自发性java.lang.NullPointerException.我似乎无法弄清楚何时发生错误的模式,并且由于一些奇怪的原因,堆栈跟踪不会向我提供异常发生的位置.我所知道的是,当我以某种方式与JavaFX应用程序线程交互时,就会发生这种情况.

但是当它确实发生时,它不仅会将其打印到控制台一次然后崩溃.发生的情况是应用程序不断地反复打印出错误消息,直到我强行关闭应用程序.发生错误时,我似乎无法再触发某些特定事件.

这是我得到的自发重复错误消息:

Exception in thread "JavaFX Application Thread" java.lang.NullPointerException
at javafx.scene.Scene$ScenePulseListener.synchronizeSceneNodes(Unknown Source)
at javafx.scene.Scene$ScenePulseListener.pulse(Unknown Source)
at com.sun.javafx.tk.Toolkit.lambda$runPulse$30(Unknown Source)
at com.sun.javafx.tk.Toolkit$$Lambda$153/452428720.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.tk.Toolkit.runPulse(Unknown Source)
at com.sun.javafx.tk.Toolkit.firePulse(Unknown Source)
at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(Unknown Source)
at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(Unknown Source)
at com.sun.javafx.tk.quantum.QuantumToolkit.lambda$runToolkit$400(Unknown Source)
at com.sun.javafx.tk.quantum.QuantumToolkit$$Lambda$42/424424770.run(Unknown Source)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(Unknown Source)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$145(Unknown Source)
at com.sun.glass.ui.win.WinApplication$$Lambda$38/12064136.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Run Code Online (Sandbox Code Playgroud)

我猜这与"同步节点"有关.由于我正在使用多线程来运行OpenGL渲染循环,这可能与案例有关.我也在使用Java8中的Lambda Expression,显然正如它在错误日志中所说的那样,它也与它们有关.

我不希望有人给我一个确切的答案,我的问题是什么,以及我做错了什么,因为我没有提供任何代码(因为我的项目太大而且我不知道Exception发生在哪里).但是,我有一些通用的问题:

  1. 这个错误日志是什么意思?

  2. 什么可能导致这个?

  3. 为什么它没有向我提供有关异常发生地点的任何信息?

我设法通过将Eclipse中的JRE从JRE安装切换到JDK提供的jar来从堆栈跟踪中获取行号.这允许我从编译的API中获取行号,例如JavaFX本身.

这是新的错误日志:

Exception in thread "JavaFX Application Thread" java.lang.NullPointerException
at javafx.scene.Scene$ScenePulseListener.synchronizeSceneNodes(Scene.java:2289) …
Run Code Online (Sandbox Code Playgroud)

java lambda multithreading javafx exception

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

如何在IntelliJ IDEA中创建JavaFX Maven项目?

如何在IntelliJ IDEA中从头开始打开JavaFX Maven项目?由于Java项目和JavaFx项目之间没有区别,我想打开一个包含Maven模块的专用JavaFX项目(从创建项目向导中选择JavaFX).

java javafx intellij-idea maven

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

如何从ToggleGroup获取选定的单选按钮

我正在研究JavaFX 8和SceneBuilder.我在FXML文件中创建了一些单选按钮,并toggleGroup为其中的单选按钮列表指定了一个名称.所以,现在我想toggleGroup在我的控制器中选择所选的单选按钮,我是否需要将所有单选按钮再次作为控制器中的字段,或者只是toggleGroup对象将获得所选单选按钮(该单选按钮的文本)仅按钮,而不是按钮对象).

javafx fxml

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