我正在尝试访问ListCell并通过放置在listcell内的按钮将其返回。将lambda表达式添加到ListCell类(如在类似问题中所建议的)无法正常工作,因为它在listcell实例中声明,这意味着当在类外部调用它时,它返回null。
对于上下文;我正在创建一个列出“来宾列表”对象的应用程序,该对象包含一个“标题”,“描述”和一个“列表视图”内的来宾列表(取自mySql),每个GuestList都包含在ListCell中。这就是ListCell。
“编辑”按钮的目的是获取GuestList,然后将信息放入编辑屏幕。因此,它将需要检索GuestList标题,描述和Guest(列表),以便可以将其全部放置在编辑屏幕中。
这是我要实现的ListCell的代码:
public class customlist extends ListCell<GuestList> {
private HBox C;
private Text Title, D;
private Region RR;
private Button BD;
private StaticTile Initials;
private VBox vbox;
private Button EDIT = new Button();
public CustomListGuestList() {
super();
Title = new Text();
D= new Text();
RR= new Region();
BD= new Button();
HBox.setHgrow(RegionFarRight, Priority.ALWAYS);
Initials = new StaticTile();
vbox = new VBox(Title, Description);
ImageView delete = new ImageView();
ImageView Edits = new ImageView();
try {
Edit.setImage(new Image("Icons/f.png"));
}
catch (Exception e) {
e.printStackTrace();
}
try {
bin.setImage(new Image("Icons/g.png"));
}
catch (Exception e) {
e.printStackTrace();
}
BD.setGraphic(bin);
EDIT.setGraphic(Edit);
c = new HBox(GuestInitial, vbox, RegionFarRight, btnEdit, btnDelete);
c.setSpacing(10);
}
public void updateItem(GuestList guestlist, boolean empty) {
super.updateItem(guestlist, empty);
if (guestlist != null && !empty) {
T.setText(G.getTitle());
D.setText(G.getDesc());
D.getStyleClass().add("DescText");
Initials.setText(Character.toString(G.getTitle().charAt(0)));
setGraphic(content);
} else {
setGraphic(null);
}
}
以下是您查看GuestLists的整个List视图borderpane的代码片段:
public class GLPage extends GridPane {
private ListView<GuestList> GL;
private HBox GLButtons;
private Button btnCGL, testbutton;
private createGuestList CGL;
private CustomListGuestList f = new CustomListGuestList();
public GuestLists() {
btnCreateGuestList = new Button("Create new GuestList");
testbutton = new Button("TEST");
GuestListSettings = new HBox(btnCGL, testbutton);
createGuestList = new createGuestList();
GL = new ListView<>();
GuestList.setPrefHeight(500);
GuestList.setPrefWidth(1100);
GuestListSettings.setPrefWidth(1100);
GuestListSettings.setPrefHeight(100);
this.add(GLbuttons, 0, 0);
this.add(G, 0, 1);
}
public void fillGL(ObservableList<GuestList> o) {
GL.setItems(o);
}
public void emptyGL() {
GL.getItems().clear();
}
public createGuestList getCGL() {
return createGuestList;
}
public void addGenerationofCells(EventHandler<ActionEvent> attachDelete) {
GL.setCellFactory(new Callback<ListView<GuestList>, ListCell<GuestList>>() {
public ListCell<GuestList> call(ListView<GuestList> GLs) {
f = new CustomListGuestList();
f.addDeleteGuestListHandler(attachDelete);
f.deleteThis();
f.EditThis();
return f;
}
});
}
GuestList ListView在程序中的外观的屏幕截图(“编辑”按钮是带有“铅笔/笔”图标的按钮):
Screenshot of ListView GuestList screen
GuestList创建在程序中的外观的屏幕截图:
Screenshot of GuestList Creation
与此相关的主要问题是,当您单击“编辑”按钮时,从技术上讲并不是在“选择”列表视图中的项目,这意味着.getSelectedModel.getSelectedItem不起作用。
请让我知道是否需要查看其他部分,请注意,我已经修剪了部分代码以仅包括相关部分,但是可能仍然存在一些错位的行。我还更改了构造函数和函数的名称。