换句话说,我正在尝试用JavaFX做一些事情,就像Batik允许你用Swing做的那样.
我希望能够捕获JavaFX UI中任意节点的外观,就像Node.snapshot()一样,除了我需要像SVG这样的矢量格式的图像,而不是光栅图像.(并且将我的节点的光栅快照插入到SVG图像中是不够的;它需要是一个适当的,可缩放的矢量图像.)
这是一个长期项目,所以我甚至愿意实现我自己的GraphicsContext,或者JavaFX的保留模式API中的等价物.
有谁知道有没有办法做到这一点?我希望在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) 我正在写小应用程序,现在我发现了一个问题.我需要调用一个(稍后可能是两个)方法(此方法加载一些东西并返回结果)而不会滞后于app的窗口.
我发现类,如Executor或Callable,但我不知道如何与那些工作.
你可以发布任何解决方案,这对我有帮助吗?
谢谢你的所有建议.
编辑:方法必须返回结果.此结果取决于参数.像这样的东西:
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)
使用此代码,我再次收到错误(即使我 …
我有一个由以下代码调用的对话框窗口(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和Threads时遇到问题.基本上我有两个选择:使用Tasks或Platform.runLater.据我所知,Platform.runLater应该用于简单/简短的任务,以及Task较长的任务.但是,我不能使用它们中的任何一个.
当我打电话时Thread,它必须在任务中间弹出验证码对话框.在使用时Task,它忽略了我显示新对话框的请求......它不允许我创建一个新阶段.
另一方面,当我使用时Platform.runLater,它让我显示一个对话框,但是,程序的主窗口冻结,直到显示弹出对话框.
我需要任何解决方案.如果有人知道如何处理这个或有一些类似的经验,并找到了解决方案,我期待着您的回复!
下面是一段简单的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将项目添加到实例中,将自动刷新并自动显示新添加的项目,无需调用任何附加add或refresh方法.
到现在为止还挺好.但是如果我在原始列表中添加一些内容(即list1).这些更改不会自动传播.它很有道理,但有时候很不方便.
当然,在传统的Java应用程序中,应用程序的模型不包含ObservableCollection实例.因此,无论何时向模型添加内容,您都必须更新ObservableLists从原始列表派生的实例.显然这是不可避免的,对吧?
这让我想知道,这是一个聪明的想法修改Collection类型事件(例如List,Collection,Set,Iterable,...)在模型类,并通过他们的替换他们ObservableCollection从现在开始的选择吗?
到目前为止,我总是认为这些ObservableCollection类只应该在应用程序的Gui层中使用,但在任何地方使用它们似乎都很方便.
当我正在努力完成我需要完成的事情时,它真的变得烦人和烦人,然后我需要对GUI进行一些更改,所以我打开Scene Builder并且它没有打开.
我试过 - 关闭Eclipse并打开它. - 杀死场景构建器进程并打开它.
什么工作 - 注销并登录然后打开eclipse和场景构建器.
这开始让我在JavaFX中失去品味.虽然我不得不在Swing上使用它.
此外,当我打开Scene Builder(从我的桌面)时,它打开很好,但是当我导航到我的Main.FXML(在我的项目中)时.无法打开Scene Builder.当我打开它时它什么都不做,它最小化.
我最近想在JavaFX中创建一个动画背景,类似于这里看到的Swing示例.我使用了一个Canvas绘制的内容,如使用Canvas API所示,以及一个AnimationTimer绘图循环,如动画基础知识所示.不幸的是,我不确定如何在调整Canvas封闭Stage大小时自动调整大小.什么是好方法?

我有一个显示最后N个项目的TableView,顶部的新项目,从底部删除项目等...似乎正在发生的事情是CPU负载随着时间的推移而增加,以指示同一台机器上的其他X应用程序变得迟缓.
平台细节:Redhat 6.7,32位,Java 1.8u40
我尝试过的事情
这个问题是较大的应用程序的一部分,但我已将其作为下面的一个较小的例子.这使得其他应用程序在几分钟后变得缓慢,但仅限于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) 我需要测试所选项的值来调用不同的方法,所以我写这段代码添加一个监听器,但代码生成语法错误
@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)