这可能是更多的设计选择,我想“为什么要重新发明轮子”。有人可能已经需要这个了。
(我不想使用任何第三方框架,因为我的框架是一个小项目。我已经在使用Adam Bein的afterburner.fx
)。我正在JavaFX中实现一个独立的应用程序。我对MVC/MVP/MVVM非常感兴趣。由于javafx允许我使用fxml分离UI,所以我通过fxml实现了大部分UI设计。但在那里我遇到了一些问题。
TradeController
(我所有的UI事件处理(还有一些业务逻辑)都在这里)交易
(实体类)TableView<Trade> myTableView;
<TableColumn fx:id="tradeOidTableColumn" prefWidth="130.0" text="Trade Oid">
<cellValueFactory><PropertyValueFactory property="oid"/></cellValueFactory>
</TableColumn>
myTradeEntity.commodity().commodityShortName();
来获取值,它工作得很好。但是你们知道,虽然fxml
我还是做不到这一点。它不支持嵌套绑定。
不可能
<cellValueFactory><PropertyValueFactory property="commodity.commodityShortName"/></cellValueFactory>
所以我被迫使用一个单元格值工厂。我定义了一个类CommodityCellValueFactory
并将其绑定。例如:
<TableColumn fx:id="commodityTableColumn" prefWidth="220.0" text="Commodity">
<cellValueFactory><CommodityCellValueFactory /></cellValueFactory>
</TableColumn>
String tempCommodityShortName;
String getTempCommodityShortName()
{
return commodity.commodityShortName();
}
interface ITradeEntityHelper
{
//all helper methods goes here
}
class TradeEntity implements ITradeEntityHelper
{
//real entity methods goes here
}
我将把接口绑定到我的tableView
。tableview
而不是tableview
如果我在尝试愚蠢的事情,请更正我
现在的问题是,如何在ITRADEEntityHelper
接口中获取TradeEntity
引用,以便可以询问
tradeEntity.Commodity().commodityShortName().
(或者)像这样
interface ITrade{}
class Trade implements ITrade{}
class TradeAdditions implements ITrade{}
将帮助器方法保留在additions
类中。
我也想为我的控制器类实现同样的功能。
class TradeController implements ITradeController, Initializable
{
}
您可以使用绑定通过多级层次结构选择值。select
。这允许您创建一个CellValueFactory
类:
import java.util.Arrays;
import javafx.beans.NamedArg;
import javafx.beans.binding.Bindings;
import javafx.beans.value.ObservableValue;
import javafx.scene.control.TableColumn;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.util.Callback;
public class NestedPropertyValueFactory<S, T> implements Callback<TableColumn.CellDataFeatures<S, T>, ObservableValue<T>> {
private final String[] steps;
private final PropertyValueFactory firstStepSelector;
/**
* @param property a string containing the names of the properties seperated
* by '.'.
*/
public NestedPropertyValueFactory(@NamedArg("property") String property) {
String[] properties = property.split("\\.");
firstStepSelector = new PropertyValueFactory<>(properties[0]);
this.steps = Arrays.copyOfRange(properties, 1, properties.length);
}
@Override
public ObservableValue<T> call(TableColumn.CellDataFeatures<S, T> param) {
// use PropertyValueFactory for first step and Bindings.select for
// additonal steps.
return Bindings.select(firstStepSelector.call(param), steps);
}
}
此类可用作fxml文件中的CellValueFactory
。
<cellValueFactory>
<NestedPropertyValueFactory property="commodity.commodityShortName"/>
</cellValueFactory>
注意,如果任何中间步骤产生null
,您将在system.err
中得到警告。
我有一个属性文件(键/值)对,从中我当前根据键读取一个值,并在UI中显示该值。 复杂性增加了,现在基于某些公式,该值更具动态性。该公式包含一个变量参数,我将在运行时获取其值。 是否有任何java设计模式来设计此场景。 我想在属性文件中针对一个键放置一个方法名。 现在我将读取键并获取方法名称。此方法将计算该特定键的值。 请告诉我你的建议
我使用我在这里找到的原型创建了一个Maven JavaFX项目:https://github.com/openjfx/javafx-maven-archetypes 一切都运行顺利,我可以运行一个项目,带有一些标签、文本框和一些按钮,没有问题。但是,当我尝试添加WebView元素(尽管IntelliJ中的场景生成器可以识别)时,我无法让导入工作。 我的pom.xml: 我的主要fxml文档来描述视
所以我在这个问题上挣扎了很长一段时间。我想在Netbeans中创建一个新的JavaFX项目,但是我没有从列表中选择JavaFX的选项。因为我有最新的java版本,JavaFX应该包含在SDK中,对吗?我还查找了是否有位于目录我也这么做。那么为什么我不能创建一个常规的JavaFX项目呢?我是不是错过了什么? 提前谢谢你!
问题内容: 根据我正在阅读的Django文档,似乎在app文件夹中是一个不错的起点,但是我面临的问题是,当我为创建信号并尝试从模型中导入类时,它与在我的模型中。 此代码将无法运行,因为我Comm_Queue在内部signals.py导入了信号,也在内部也导入了信号models.py。 谁能建议我如何解决这个问题? 问题答案: 对于Django <1.7的原始答案: 你可以通过导入应用程序的文件来注
是的,不确定我是否做错了什么,或者这是Laravel中的Illumb\Database的问题。 我的代码: groupBy之前的结果是: 但对于groupBy: 所以我的问题是,我想去掉对象中的类型。。。 有什么想法吗?
堆栈跟踪 我试过关于这个话题的所有解答,但我总是得到同样的错误。