- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个 JavaFX 应用程序并尝试遵循模型- View - Controller 模式。我已经用普通的 java 对象( double 、整数、字符串...)实现了模型,认为我会在非 JavaFX 项目中重用该模型。然而,我发现在没有属性的情况下,当模型发生变化时,很难使 View 自动更新。在将每个变量更改为属性之前,我想问一下仅使用 JavaFX 属性来实现模型是否正确。
最佳答案
当我们从 Swing 切换到 JavaFX 时,我帮助公司设计和(重新)架构了一个大型 Java GUI 应用程序。我们预先做出的基本决定之一是大规模采用 JavaFX 属性。我们在所有模型代码中都使用了它们,甚至在与 GUI 没有任何联系的后端代码中也是如此。
非常重要:这与将我们的模型设计为单线程密切相关。特别是,所有模型更新都必须在 JavaFX 线程上完成。这个想法受到了很大的阻力,因为我们以前的应用程序是高度多线程的,人们不愿意放弃这一点。长话短说,我们将所有 I/O 和计算都切换为非阻塞。虽然工作量很大,但最终还是成功了。事实证明,如果你从不阻塞,单个线程可以完成很多工作。这个决定几乎单枪匹马地消除了我们所有的竞争条件和其他多线程错误,这在我的书中是一个巨大的胜利。
使用 JavaFX 属性是一个伟大的决定,我衷心推荐它。在代码风格方面,我们看到了很多优点:很容易监听属性更改,很容易添加动态更新其他属性的 react 性代码,很容易注册函数式绑定(bind),可以让我们使用像 map< 这样的习惯用法
和 reduce
贯穿我们的代码。
唯一真正风格的缺点是添加了大量样板。声明一个新属性基本上需要 4-6 行代码。您需要属性变量、一个 getter、一个 setter 和一个底层属性对象的 getter。为了节省垂直空间,我坚持将这些项目压缩为每行,并将它们放在一起而不是分散在整个源文件中。例如:
/** User's first and last name. */
private final StringProperty nameProperty = new StringProperty("name");
public ReadOnlyStringProperty nameProperty() { return nameProperty; }
public String getName() { return nameProperty.get(); }
private void setName(String name) { nameProperty.set(name); }
关于java - 普通对象变量还是JavaFX对象属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65624595/
我的一位教授给了我们一些考试练习题,其中一个问题类似于下面(伪代码): a.setColor(blue); b.setColor(red); a = b; b.setColor(purple); b
我似乎经常使用这个测试 if( object && object !== "null" && object !== "undefined" ){ doSomething(); } 在对象上,我
C# Object/object 是值类型还是引用类型? 我检查过它们可以保留引用,但是这个引用不能用于更改对象。 using System; class MyClass { public s
我在通过 AJAX 发送 json 时遇到问题。 var data = [{"name": "Will", "surname": "Smith", "age": "40"},{"name": "Wil
当我尝试访问我的 View 中的对象 {{result}} 时(我从 Express js 服务器发送该对象),它只显示 [object][object]有谁知道如何获取 JSON 格式的值吗? 这是
我有不同类型的数据(可能是字符串、整数......)。这是一个简单的例子: public static void main(String[] args) { before("one"); }
嗨,我是 json 和 javascript 的新手。 我在这个网站找到了使用json数据作为表格的方法。 我很好奇为什么当我尝试使用 json 数据作为表时,我得到 [Object,Object]
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
我听别人说 null == object 比 object == null check 例如: void m1(Object obj ) { if(null == obj) // Is thi
Match 对象 提供了对正则表达式匹配的只读属性的访问。 说明 Match 对象只能通过 RegExp 对象的 Execute 方法来创建,该方法实际上返回了 Match 对象的集合。所有的
Class 对象 使用 Class 语句创建的对象。提供了对类的各种事件的访问。 说明 不允许显式地将一个变量声明为 Class 类型。在 VBScript 的上下文中,“类对象”一词指的是用
Folder 对象 提供对文件夹所有属性的访问。 说明 以下代码举例说明如何获得 Folder 对象并查看它的属性: Function ShowDateCreated(f
File 对象 提供对文件的所有属性的访问。 说明 以下代码举例说明如何获得一个 File 对象并查看它的属性: Function ShowDateCreated(fil
Drive 对象 提供对磁盘驱动器或网络共享的属性的访问。 说明 以下代码举例说明如何使用 Drive 对象访问驱动器的属性: Function ShowFreeSpac
FileSystemObject 对象 提供对计算机文件系统的访问。 说明 以下代码举例说明如何使用 FileSystemObject 对象返回一个 TextStream 对象,此对象可以被读
我是 javascript OOP 的新手,我认为这是一个相对基本的问题,但我无法通过搜索网络找到任何帮助。我是否遗漏了什么,或者我只是以错误的方式解决了这个问题? 这是我的示例代码: functio
我可以很容易地创造出很多不同的对象。例如像这样: var myObject = { myFunction: function () { return ""; } };
function Person(fname, lname) { this.fname = fname, this.lname = lname, this.getName = function()
任何人都可以向我解释为什么下面的代码给出 (object, Object) 吗? (console.log(dope) 给出了它应该的内容,但在 JSON.stringify 和 JSON.parse
我正在尝试完成散点图 exercise来自免费代码营。然而,我现在只自己学习了 d3 几个小时,在遵循 lynda.com 的教程后,我一直在尝试确定如何在工具提示中显示特定数据。 This code
我是一名优秀的程序员,十分优秀!