我正在使用JavaFX ListView组件,并希望使用一个自定义的单元工厂。当包含列表视图的对话框打开时,项目将正确呈现。但是,如果我尝试从基础的可观察列表中添加或删除一个项,则列表视图中的项不会正确呈现。我会让细胞复制或缺失。下面是我的自定义单元格的FXML:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.text.Font?>
<?import org.controlsfx.glyphfont.Glyph?>
<VBox fx:id="vbox" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="150.0" prefWidth="300.0" spacing="5.0" xmlns="http://javafx.com/javafx/8.0.111" xmlns:fx="http://javafx.com/fxml/1">
<padding>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</padding>
<children>
<Label fx:id="nameLabel" style="-fx-font-weight: bold; -fx-font-size: 14;" text="Mr Stephen Lowe" />
<Label fx:id="mobileLabel" text="07798933862">
<graphic>
<Glyph fontFamily="FontAwesome" icon="PHONE" />
</graphic>
<font>
<Font size="12.0" />
</font>
</Label>
<Label fx:id="emailLabel" text="stephen.lowe@mypostoffice.co.uk">
<graphic>
<Glyph fontFamily="FontAwesome" icon="ENVELOPE" />
</graphic>
<font>
<Font size="12.0" />
</font>
</Label>
<Label fx:id="churchMemberLabel" text="Church Member" textFill="#388e3c">
<font>
<Font size="12.0" />
</font></Label>
</children>
</VBox>
下面是我的自定义ListCell子类:
/**
*
* @author Stephen
*/
public class MemberListViewCell extends ListCell<MemberEntity> {
@FXML
private Label nameLabel;
@FXML
private Label mobileLabel;
@FXML
private Label emailLabel;
@FXML
private Label churchMemberLabel;
@FXML
private VBox vbox;
private FXMLLoader loader;
public MemberListViewCell() {
}
@Override
protected void updateItem(MemberEntity item, boolean empty) {
super.updateItem(item, empty);
if (empty || item == null) {
setText(null);
} else {
if (loader == null) {
loader = new FXMLLoader(getClass().getResource("/fxml/listcell.fxml"));
loader.setController(this);
try {
loader.load();
} catch (IOException ex) {
Alert alert = new Alert(Alert.AlertType.ERROR);
alert.setTitle("Open FXML");
alert.setHeaderText("FXML Error");
String msg = "Could not load FXML for list cell factory. Inform software engineer. Terminating program.";
msg += ex.toString();
alert.setContentText(msg);
alert.showAndWait();
System.exit(1);
}
}
nameLabel.setText(item.getName().getFormattedName(Name.NameFormat.FORENAME_SURNAME));
mobileLabel.setText(item.getMobileTelephone());
emailLabel.setText(item.getEmailAddress());
if (item.isChurchMember()) {
churchMemberLabel.setText("Church Member");
churchMemberLabel.setTextFill(Paint.valueOf("#388e3c"));
} else {
churchMemberLabel.setText("Not Church Member");
churchMemberLabel.setTextFill(Paint.valueOf("#d32f2f"));
}
setText(null);
setGraphic(vbox);
}
}
}
由于您为非空单元格设置了图形,因此如果单元格变为空,则需要将其设置回null:
@Override
protected void updateItem(MemberEntity item, boolean empty) {
super.updateItem(item, empty);
if (empty || item == null) {
setText(null);
setGraphic(null);
} else {
// existing code ...
}
}
这与我之前的问题有关。 单元格格式正确,填充正确,因此该部件工作正常。要使细胞工厂正确还需要做什么?
问题内容: 在对Angular工厂进行单元测试(使用Karma + Jasmine)时,如何将存根依赖项注入到要测试的工厂中? 这是我的工厂: 实例化我的工厂时需要。 这是我的测试: 注意:我知道这允许用于控制器,但是我没有看到与之等效的工厂。 问题答案: 我知道有两种方法可以完成这样的事情: 使用和匿名模块注入模拟。 注入您要模拟的服务,并使用茉莉的间谍功能提供模拟值。 第二个选项仅在您确切知道
活字印刷 面向对象 话说三国时期,曹操带领百万大军攻打东吴,大军在长江赤壁驻扎,军船连成一片,眼看就要灭掉东吴,统一天下,曹操大悦,于是大宴众文武,在酒席间,曹操诗兴大发,不觉吟道:喝酒唱歌,人生真爽。众文武齐呼:“丞相好诗!于是一臣子速命印刷工匠刻板印刷,以便流传天下。” 样张出来给曹操一看,曹操感觉不妥,说到:“喝与唱,此话过俗,应该为‘对酒当歌’较好!”,于是此臣就命工匠重新来过。工匠眼看连
本文向大家介绍Java设计模式之工厂模式分析【简单工厂、工厂方法、抽象工厂】,包括了Java设计模式之工厂模式分析【简单工厂、工厂方法、抽象工厂】的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Java设计模式之工厂模式。分享给大家供大家参考,具体如下: 一、 简单工厂 先来思考一个问题。我们平时写程序时,会有这种情况,A对象里面需要调用B对象的方法,这时我们使用的一般是new关键字来创建
3 完整解决方案 为了将Chart类的职责分离,同时将Chart对象的创建和使用分离,Sunny软件公司开发人员决定使用简单工厂模式对图表库进行重构,重构后的结构如图2所示: 图2 图表库结构图 在图2中,Chart接口充当抽象产品类,其子类HistogramChart、PieChart和LineChart充当具体产品类,ChartFactory充当工厂类。完整代码如下
2 简单工厂模式概述 简单工厂模式并不属于GoF 23个经典设计模式,但通常将它作为学习其他工厂模式的基础,它的设计思想很简单,其基本流程如下: 首先将需要创建的各种不同对象(例如各种不同的Chart对象)的相关代码封装到不同的类中,这些类称为具体产品类,而将它们公共的代码进行抽象和提取后封装在一个抽象产品类中,每一个具体产品类都是抽象产品类的子类;然后提供一个工厂类用