标签: javafx

如何将JavaFX节点导出到SVG图像?

换句话说,我正在尝试用JavaFX做一些事情,就像Batik允许你用Swing做的那样.

我希望能够捕获JavaFX UI中任意节点的外观,就像Node.snapshot()一样,除了我需要像SVG这样的矢量格式的图像,而不是光栅图像.(并且将我的节点的光栅快照插入到SVG图像中是不够的;它需要是一个适当的,可缩放的矢量图像.)

这是一个长期项目,所以我甚至愿意实现我自己的GraphicsContext,或者JavaFX的保留模式API中的等价物.

有谁知道有没有办法做到这一点?我希望在JavaFX中甚至可以做什么?

java svg javafx vector-graphics

13
推荐指数
2
解决办法
4700
查看次数

选中复选框时触发JAVAFX事件

我的JavaFx FXML应用程序存在问题.

当我在表单上选中一个复选框时,我想根据单击的复选框执行一个方法.有没有办法可以将复选框的名称传递给方法,以便我可以对它执行一些有条件的工作?

我有两个复选框,只能选择一个.当我点击一个时,另一个应该被取消选择,反之亦然.显然下面的代码不起作用所以我希望传递被点击的对象的名称.

任何帮助将不胜感激,非常感谢.

@FXML private void updateRcs(){

    if (chkRcsuri.isSelected()){
        chkRcsuri2.setSelected(false);
    }

    if (chkRcsuri2.isSelected()){
        chkRcsuri.setSelected(false);
    }

}
Run Code Online (Sandbox Code Playgroud)

javafx

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

在新线程中调用方法的简便方法

我正在写小应用程序,现在我发现了一个问题.我需要调用一个(稍后可能是两个)方法(此方法加载一些东西并返回结果)而不会滞后于app的窗口.

我发现类,如ExecutorCallable,但我不知道如何与那些工作.

你可以发布任何解决方案,这对我有帮助吗?

谢谢你的所有建议.

编辑:方法必须返回结果.此结果取决于参数.像这样的东西:

public static HtmlPage getPage(String page) throws FailingHttpStatusCodeException, MalformedURLException, IOException {
        return webClient.getPage(page);
}
Run Code Online (Sandbox Code Playgroud)

此方法大约需要8-10秒.执行此方法后,可以停止线程.但我需要每2分钟调用一次方法.

编辑:我用这个编辑了代码:

public static HtmlPage getPage(final String page) throws FailingHttpStatusCodeException, MalformedURLException, IOException {
    Thread thread = new Thread() {
        public void run() {
            try {
                loadedPage = webClient.getPage(page);
            } catch (FailingHttpStatusCodeException | IOException e) {
                e.printStackTrace();
            }
        }
    };
    thread.start();
    try {
        return loadedPage;
    } catch (Exception e) {
        return null;
    }

}
Run Code Online (Sandbox Code Playgroud)

使用此代码,我再次收到错误(即使我 …

java multithreading javafx ui-thread

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

FXML load()期间的JavaFX IllegalAccessException

我有一个由以下代码调用的对话框窗口(DialogController是一个使用模式对话框窗口的辅助类;它主要将控制器引用与其窗口捆绑在一起):

void handleServicesEdit(ActionEvent event) throws IOException {

    DCServRecEditor sre = DialogController.<DCServRecEditor>loadFXML(
            CensusAssistant.RES_FXML_DIALOG_SERVEDIT,
            CensusAssistant.RES_STRING_SERVEDIT,
            this.getDialog());
    sre.setDialogMode(DB.DBEDIT_MODE_EDIT,
                      tbvService.getItems(),
                      tbvService.getSelectionModel().getSelectedIndex(),
                      m_encCal);
    sre.showAndWait();

    sre.release();
    this.updateGUI();
}
Run Code Online (Sandbox Code Playgroud)

我已确认在该FXMLLoader.load()方法期间出现异常.我还确定错误发生在我的initialize()方法中的任何代码都有机会运行之前.我得到的一些堆栈跟踪load()在这里:

java.lang.IllegalAccessException: Class sun.reflect.misc.ReflectUtil 
    can not access a member of class org.kls.md.censusassistant.DCServRecEditor 
    with modifiers ""
file:/D:/Documents/NetBeansProjects/CensusAssistant/dist/run1284250063/CensusAssistant.jar!/org/kls/md/censusassistant/fxml/GUIServRecEditor.fxml:13
  at javafx.fxml.FXMLLoader$ValueElement.processAttribute(FXMLLoader.java:738)
  at javafx.fxml.FXMLLoader$InstanceDeclarationElement.processAttribute(FXMLLoader.java:775)
  at javafx.fxml.FXMLLoader$Element.processStartElement(FXMLLoader.java:180)
  at javafx.fxml.FXMLLoader$ValueElement.processStartElement(FXMLLoader.java:563)
    at javafx.fxml.FXMLLoader.processStartElement(FXMLLoader.java:2314)
  at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2131)
  at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2028)
  at org.kls.md.censusassistant.DialogController.loadFXML(DialogController.java:63)
  at org.kls.md.censusassistant.DCMainEditor.handleServicesEdit(DCMainEditor.java:330)
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

        ...

Caused by: java.lang.IllegalAccessException: Class sun.reflect.misc.ReflectUtil
    can not access a member of class …
Run Code Online (Sandbox Code Playgroud)

javafx javafx-2 illegalaccessexception fxml

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

JavaFX使用线程和GUI

使用JavaFX和Threads时遇到问题.基本上我有两个选择:使用TasksPlatform.runLater.据我所知,Platform.runLater应该用于简单/简短的任务,以及Task较长的任务.但是,我不能使用它们中的任何一个.

当我打电话时Thread,它必须在任务中间弹出验证码对话框.在使用时Task,它忽略了我显示新对话框的请求......它不允许我创建一个新阶段.

另一方面,当我使用时Platform.runLater,它让我显示一个对话框,但是,程序的主窗口冻结,直到显示弹出对话框.

我需要任何解决方案.如果有人知道如何处理这个或有一些类似的经验,并找到了解决方案,我期待着您的回复!

user-interface multithreading javafx task

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

JavaFX - 数据模型类中的Observable Collections

下面是一段简单的JavaFX代码,用来说明我的问题.

List list1 = new ArrayList();
list1.add("foo");
...

someListView = new ListView<>();
ObservableList someObservableList = FXCollections.observableList(list1);
someListView.setItems(someObservableList);
...

someObservableList.add("bar");
Run Code Online (Sandbox Code Playgroud)

如果我理解正确,在调用该setItems方法后,不仅会在ListViewGui组件中显示列表的内容,而且如果ObservableList之后ListView将项目添加到实例中,将自动刷新并自动显示新添加的项目,无需调用任何附加addrefresh方法.

到现在为止还挺好.但是如果我在原始列表中添加一些内容(即list1).这些更改不会自动传播.它很有道理,但有时候很不方便.

当然,在传统的Java应用程序中,应用程序的模型不包含ObservableCollection实例.因此,无论何时向模型添加内容,您都必须更新ObservableLists从原始列表派生的实例.显然这是不可避免的,对吧?

这让我想知道,这是一个聪明的想法修改Collection类型事件(例如List,Collection,Set,Iterable,...)在模型类,并通过他们的替换他们ObservableCollection从现在开始的选择吗?

到目前为止,我总是认为这些ObservableCollection类只应该在应用程序的Gui层中使用,但在任何地方使用它们似乎都很方便.

java collections model-view-controller javafx javafx-2

13
推荐指数
2
解决办法
3056
查看次数

有时JavaFX中的Scene Builder无法打开

当我正在努力完成我需要完成的事情时,它真的变得烦人和烦人,然后我需要对GUI进行一些更改,所以我打开Scene Builder并且它没有打开.

我试过 - 关闭Eclipse并打开它. - 杀死场景构建器进程并打开它.

什么工作 - 注销并登录然后打开eclipse和场景构建器.

这开始让我在JavaFX中失去品味.虽然我不得不在Swing上使用它.

此外,当我打开Scene Builder(从我的桌面)时,它打开很好,但是当我导航到我的Main.FXML(在我的项目中)时.无法打开Scene Builder.当我打开它时它什么都不做,它最小化.

javafx

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

自动调整Canvas大小以填充封闭的Parent

我最近想在JavaFX中创建一个动画背景,类似于这里看到的Swing示例.我使用了一个Canvas绘制的内容,如使用Canvas API所示,以及一个AnimationTimer绘图循环,如动画基础知识所示.不幸的是,我不确定如何在调整Canvas封闭Stage大小时自动调整大小.什么是好方法?

图片

java animation resize javafx

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

JavaFX滚动表更新性能会随着时间的推移而降低

我有一个显示最后N个项目的TableView,顶部的新项目,从底部删除项目等...似乎正在发生的事情是CPU负载随着时间的推移而增加,以指示同一台机器上的其他X应用程序变得迟缓.

平台细节:Redhat 6.7,32位,Java 1.8u40

我尝试过的事情

  • 引入了runLater() - 原始代码从非FX线程更新了可观察列表 - 显然这是错误的
  • 优化 - 如果尚未进行更新,则仅在JavaFX应用程序线程上放置新的Runnables
  • 优化-bulk更新Observable列表而不是单独添加
  • 使用jvisual VM来识别任何内存泄漏,找不到任何东西.
  • 我试图重新创造这个
    • Windows 7(在金属上) - JDK 8u40 64位=>不会发生
    • Ubuntu 16.04 JDK 8u40 64位(在带有vmwgfx的VM内)=>不会发生
    • Ubuntu 16.04 OpenJDK + OpenJFX最新版(8u91)(金属上)=> 确实发生

JVisual VM - 新硬件上的Redhat 6u7(32位)

Redhat 6u7

JVisual VM - 旧硬件上的Ubuntu 16.04(64位)(2008 iMac)

英特尔iMac上的Ubuntu 16.04

这个问题是较大的应用程序的一部分,但我已将其作为下面的一个较小的例子.这使得其他应用程序在几分钟后变得缓慢,但仅限于Redhat 6u7平台.

public class TableUpdater extends Application {
    private int maxItems = 30;
    private AtomicBoolean pending = new AtomicBoolean();
    public class Thing {
        private String foo;
        public Thing(String foo) {
            this.foo = foo;
        } …
Run Code Online (Sandbox Code Playgroud)

java performance multithreading javafx javafx-8

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

javafx ComBobox在所选项目值上添加侦听器

我需要测试所选项的值来调用不同的方法,所以我写这段代码添加一个监听器,但代码生成语法错误

@FXML
private JFXComboBox<String> cmbComp;

cmbComp.valueProperty().addListener(new ChangeListener<String>() {
        public void changed(ObservableValue<String> composant, String oldValue, String newValue) throws SQLException {

            if(/*test item value*/){
                /*do something*/
            }else{
                /*do other thing*/
            }
        }
    });
Run Code Online (Sandbox Code Playgroud)

我也不需要旧值和新值,只需测试选定的值,我怎么能传递参数?


我发现错误,这里是新代码,我希望它能帮助别人

cmbComp.getSelectionModel().selectedItemProperty().addListener( (options, oldValue, newValue) -> {
           System.out.println(newValue)
    }
    ); 
Run Code Online (Sandbox Code Playgroud)

combobox javafx

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