Невозможно получить доступ к Содержанию ListCell вне объявления класса ListCell - PullRequest
0 голосов
/ 18 января 2019

Я пытаюсь получить доступ к 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 не работает.

Пожалуйста, дайте мне знать, если вам нужно увидеть другие части, пожалуйста, обратите внимание, что я обрезал куски кода, чтобы включить только соответствующие части, но там могут быть некоторые неуместные строки. Я также изменил имена конструкторов и функций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...