Я пытаюсь получить доступ к ListCell и вернуть его с помощью кнопки, расположенной внутри listcell. Добавление лямбда-выражения в класс ListCell (как было предложено в аналогичном вопросе) не работает, так как оно объявлено в экземпляре listcell, то есть при его вызове вне класса возвращается null.
для контекста; Я создаю приложение, которое перечисляет объекты «Списки гостей», которые содержат заголовок, описание и список гостей (взятых из mySql) в представлении списка, каждый гостевой список содержится в ListCell. Это существо ListCell.
Назначение кнопок редактирования состоит в том, чтобы взять гостевой список, а затем поместить информацию на экран редактирования. Таким образом, ему нужно будет получить заголовок, описание и гостевой список (список) в GuestList, чтобы они могли быть помещены на экран редактирования.
Вот код для моих реализуемых ListCells:
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);
}
}
Вот фрагмент кода для общей области просмотра списка, где вы просматриваете гостевые списки:
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;
}
});
}
Снимок экрана того, как выглядит список гостевого списка в программе (кнопка «Редактировать» - кнопка со значком карандаша / пера):
Снимок экрана экрана ListView GuestList
Скриншот того, как в программе выглядит GuestList Creation:
Снимок экрана создания гостевого списка
Основная проблема заключается в том, что когда вы нажимаете кнопку редактирования, вы технически не «выбираете» элемент в представлении списка, то есть .getSelectedModel.getSelectedItem не работает.
Пожалуйста, дайте мне знать, если вам нужно увидеть другие части, пожалуйста, обратите внимание, что я обрезал куски кода, чтобы включить только соответствующие части, но там могут быть некоторые неуместные строки. Я также изменил имена конструкторов и функций.