我正在尝试为JavaFXListview
创建一个非常简单的自定义ListCell
。运行应用程序时,列表视图中有没有任何内容的项目。它们可以点击,但是是空的。如下图所示:
我使用的是基于JDK12和Maven JFX原型(原型artifactid:javafx原型fxml,groupid:org.openjfx)的设置。我遵循了一个名为“Turais Custom ListCell”的指南。
一个pp.java
public class App extends Application {
private static Scene scene;
@Override
public void start(Stage stage) throws IOException {
scene = new Scene(loadFXML("primary"));
stage.setScene(scene);
stage.show();
}
static void setRoot(String fxml) throws IOException {
scene.setRoot(loadFXML(fxml));
}
private static Parent loadFXML(String fxml) throws IOException {
FXMLLoader fxmlLoader = new FXMLLoader(App.class.getResource(fxml + ".fxml"));
return fxmlLoader.load();
}
public static void main(String[] args) {
launch();
}
}
主要ontroller.java
public class PrimaryController implements Initializable {
ObservableList<Student> students;
@FXML
private ListView<Student> listView1;
@FXML
private void switchToSecondary() throws IOException {
App.setRoot("secondary");
}
public PrimaryController(){
super();
students = FXCollections.observableArrayList();
students.add(new Student());
}
@Override
public void initialize(URL url, ResourceBundle resourceBundle) {
listView1.setItems(students);
listView1.setCellFactory(new Callback<ListView<Student>, ListCell<Student>>() {
@Override
public ListCell<Student> call(ListView<Student> listView) {
return new StudentListViewCell();
}
});
}
}
Primary.fxml
<VBox alignment="CENTER" prefHeight="257.0" prefWidth="230.0" spacing="20.0" xmlns="http://javafx.com/javafx/8.0.172-ea" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.test.PrimaryController">
<children>
<Label text="Primary View" />
<Button fx:id="primaryButton" onAction="#switchToSecondary" text="Switch to Secondary View" />
<ListView fx:id="listView1" prefHeight="200.0" prefWidth="200.0" />
</children>
<padding>
<Insets bottom="20.0" left="20.0" right="20.0" top="20.0" />
</padding>
</VBox>
ListCell.fxml
<AnchorPane prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.172-ea" xmlns:fx="http://javafx.com/fxml/1">
<children>
<Label fx:id="label1" layoutX="293.0" layoutY="190.0" text="Label" />
</children>
</AnchorPane>
StudentListViewCell.java
public class StudentListViewCell extends ListCell<Student> {
@FXML
private Label label1;
@FXML
private AnchorPane anchorPane;
private FXMLLoader mLLoader;
@Override
protected void updateItem(Student student, boolean empty) {
super.updateItem(student, empty);
if(empty || student == null) {
setText(null);
setGraphic(null);
} else {
if (mLLoader == null) {
mLLoader = new FXMLLoader(getClass().getResource("ListCell.fxml"));
mLLoader.setController(this);
try {
mLLoader.load();
} catch (IOException e) {
e.printStackTrace();
}
}
label1.setText("rightText");
setText(null);
setGraphic(anchorPane);
}
}
}
Student.java
public class Student {
private String name;
public Student(String name){
this.name = name;
}
}
我期待一个单一的<代码> ListCys,中间有一个标签,上面写着“右TeleTXT”。但我的自定义listcell似乎甚至没有呈现。有什么建议吗?
除了您的实现看起来比需要的复杂得多之外,您的实际问题非常简单。
您的ListCell.fxml
文件未将fx:id
分配给您的AnchorPane
。因此,当您在StudentListViewCell.java
类中定义它时,您实际上是在创建一个新的主播
,并且它不包含标签
。
只需更改您的ListCell.fxml
文件并分配id即可解决该问题:
<AnchorPane fx:id="anchorPane" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.172-ea"
xmlns:fx="http://javafx.com/fxml/1">
<children>
<Label fx:id="label1" layoutX="293.0" layoutY="190.0" text="Label"/>
</children>
</AnchorPane>
我试图找出如何使用一个与一个在,但没有运气,我已经查了,我能找到的都是不完整的教程和问题。下面是我的FXML 还有我的模特 和我不完整的 还有我的控制器 请不要告诉我找不到。我现在迷路了,我不知道在我的FXML中更新图像视图和标签的正确方法。任何人来帮助或与一个教程的链接,我可以遵循,我将不胜感激。
我创建了一个自定义IntegerRapper类来实现一个属性提取器方法,如下所示: 我还创建了一个名为“PortCell”的类,它扩展了ListCell以设计我喜欢的单元格,如下所示: 当用户右键单击ListView中的端口号并单击“开始监听”时,我希望红十字会变成一个绿色的勾号,这一切正常,但当我移除带有绿色勾号的端口上方的端口时,绿色勾号下方显示的端口似乎继承了勾号?绿色勾号仅在传递给upda
问题内容: 我尝试使用自定义ListCell在ListView中查看自定义对象。为了说明这个问题,我选择了一个例子。同样出于演示目的,我在渲染时直接禁用了ListCell。这些项目是由线程模拟的外部过程添加的。一切看起来都很不错,直到我为禁用的ListCell应用CSS着色为止。现在看来,有些虚幻项与创建它们的ListCell一起被禁用。 我该如何解决? App.java app.css 问题答案
问题的核心是,我不能刷新或更改一个场景的节点的内容(这里是TablesMain)从另一个类(这里是NamePriceCell)。 我正在使用主StackPane(TableMainController扩展StackPane)构建和应用程序,其中包含其他节点,其中一些节点是ListView。在一个特定的ListView(比如“readitemslistview”)中,我创建了一个自定义ListCel
好吧,这变得有点复杂,涉及到所有不同的节点。如有可能,请随时提供简化建议。 我试图用自定义对象填充JavaFXListView,并用自定义节点格式化。 我有一个名为Contact的自定义对象,它的定义如下: 下面是我希望ListView中的每个联系人显示为的示例。 此自定义节点(ContactCell)由一个VBox根节点(顶部有一个用于联系人姓名的标签)和一个用于堆叠两部电话的VBox以及一个用
我正在尝试创建一个自定义标签类型,该类型将包含一个“淡出”函数。这用于显示将闪烁然后隐藏的消息。 我正在使用Eclipse、SceneBuilder和Javafx。我不知道该怎么做,也不知道是否可能,但到目前为止,我已经做到了: 这显然行不通。 这是我第一次在一个文件中处理凌乱的代码(因此,我尝试将代码从版本1拉入一个新的“对象”,我可以在多个类中使用它): 如果您有任何建议或帮助,我们将不胜感激