public class Car{
private SimpleIntegerProperty id = new SimpleIntegerProperty();
private SimpleStringProperty brand = new SimpleStringProperty();
private SimpleStringProperty engine = new SimpleStringProperty();
private SimpleBooleanProperty navi = new SimpleBooleanProperty();
private SimpleBooleanProperty available = new SimpleBooleanProperty();
private SimpleDoubleProperty liters = new SimpleDoubleProperty();
private SimpleIntegerProperty power = new SimpleIntegerProperty();
(...)
}
class MainController
{
@FXML
public void initialize()
{
idColumn.setCellValueFactory(new PropertyValueFactory<Car, Integer>("id"));
engineColumn.setCellValueFactory(new PropertyValueFactory<Car, String>("engine"));
brandColumn.setCellValueFactory(new PropertyValueFactory<Car, String>("brand"));
naviColumn.setCellValueFactory(new PropertyValueFactory<Car, Boolean>("navi"));
availableColumn.setCellValueFactory(new PropertyValueFactory<Car, Boolean>("available"));
powerColumn.setCellValueFactory(new PropertyValueFactory<Car, Integer>("power"));
fuelColumn.setCellValueFactory(new PropertyValueFactory<Car, Double>("liters"));
carModel.getObservableList().add(new Car(213,"FIAT","1.9 JTD",true,true,32.4,132));
tableView.setItems(carModel.getObservableList());
}
carModel.getObservableList().addListener((Change<? extends Car> c) -> {
while (c.next()) {
if (c.wasAdded()) {
System.out.println("Added:");
c.getAddedSubList().forEach(System.out::println);
System.out.println();
}
if (c.wasRemoved()) {
System.out.println("Removed:");
c.getRemoved().forEach(System.out::println);
System.out.println();
}
if (c.wasUpdated()) {
System.out.println("Updated:");
carModel.getObservableList().subList(c.getFrom(), c.getTo()).forEach(System.out::println);
System.out.println();
}
}
});
我在论坛上发现了这样的sollution,正如我所说的,它只检测添加/删除对象
如果只需要更改一个属性的事实,最简单的方法是将所有属性连接到一个ObservableValue
中。
在CAR
类中,请使用以下方法:
ObservableValue changeProperty() {
return Bindings.concat(id, brand, engine, navi, available, liters, power);
}
在客户端,您只需收听:
car.changeProperty().addListener(new ChangeListener() {
@Override
void changed(ObservableValue observable, Object oldValue, Object newValue) {
// one of property was changed, do something
}
})
ObservableValue changeProperty() {
return Bindings.concat(car1.changeProperty(), car2.changeProperty(), carN.changeProperty());
}
问题内容: 我正在使用以下聚合: 这有效,但是我只会得到无用的聚合-我也必须与… 相处 问题答案: 如果您想获取该ID的类别名称, 因此,子聚合(嵌套在上面)为您提供了id的categoryName。
这个代码段总是执行else部分,所以我想等到变量从数据库中获取值后再执行。
问题内容: 在Netbeans中,我使用了GUI Builder将JTable插入到我的应用程序中。 到目前为止,我只有一个类(CustomerDB): 每当用户更改表中的数据时,我都希望获取该单元格的旧值(可选)和新值。 为了获取此数据,我尝试实现一个事件侦听器: 然后,将此CellEditorListener分配给表(其单元格编辑器): 到目前为止,该方法有效。 但这还无法使我检测到此单元格的
我有一个带有子组件的组件。 在时间轴组件中,我有这些属性: 如何检查何时从时间轴组件对属性进行更改?每当编辑值发生更改时,我都需要发出该值。 我应该为编辑属性使用一个setter,然后从那里发出吗? 或者有其他方法吗?
是否有一种方法可以在每次文件更改时以某种方式触发一个事件?我是指类似的东西(在伪代码中) 我知道我可以周期性地做,但我能在没有计时器的情况下做吗?我希望在用户更新txt文件时(不是通过代码,而是通过打开文件并在里面写入)能够做出一些动作,但我不知道他什么时候会这么做。
问题内容: 我想知道何时失去互联网连接并重新获得互联网,以便可以在显示“糟糕,没有互联网”的警报和包含从我的服务器派生的数据的Google地图或网格之间切换。 这个相关的问题和另一个相关的问题认为他们有答案,但没有答案。 他们的解决方案适用于Chrome版本34.0.1847.137 m,MS IE v11.0.xx,但不适用于FireFox v29.0.1,因此,我正在寻求一种适用于所有这三种浏