Выбрать строку из таблицы при нажатии кнопки в той же строке JavaFX - PullRequest
0 голосов
/ 17 ноября 2018

Я создал TableView в JavaFX, он содержит два столбца:

  • Первая строка (бросок): содержит номер броска. студента
  • Вторая строка (Подробности): содержит кнопку, которая при нажатии печатает «Рулон» соответствующей строки.

Мой подход:

    static ObservableList<Student> list= FXCollections.observableArrayList();
    static ObservableList<Student> getStudentList() throws SQLException {
        con = ConnectionUtil.getDataBaseConnection();

        String SQL = "Select * from student;";            
            ResultSet rs = con.createStatement().executeQuery(SQL);  
            while(rs.next()){
              //Student cm = new Student(rs.getInt("rno"), rs.getString("name"),false);
                Student cm = new Student();
                cm.setFullName(rs.getString("name"));
                cm.setRoll(rs.getString("rno"));
                cm.setSingle(false);
              list.add(cm); 
            } 
      return list;
    }

    static TableColumn<Student, String> rollCol = new TableColumn<Student, String>("Roll");

    static TableColumn<Student, Void> viewCol = new TableColumn<Student, Void>("Details");

      static TableColumn<Student, Void>  addButtonToTable() {
        //TableColumn<Student, Void> viewCol = new TableColumn("Button Column");

        Callback<TableColumn<Student, Void>, TableCell<Student, Void>> cellFactory = new Callback<TableColumn<Student, Void>, TableCell<Student, Void>>() {
            @Override
            public TableCell<Student, Void> call(final TableColumn<Student, Void> param) {
                final TableCell<Student, Void> cell = new TableCell<Student, Void>() {

                    private final Button btn = new Button("View");

                    {

                        btn.setOnAction((ActionEvent event) -> {

                            /////////////////WORK START FROM HERE
                            static Student stu=tables.getItems();

                            String res = (stu.getRollNo().toString());

                            System.out.println(res);
                        });
                    }

                    @Override
                    public void updateItem(Void item, boolean empty) {
                        super.updateItem(item, empty);
                        if (empty) {
                            setGraphic(null);
                        } else {
                            setGraphic(btn);
                        }
                    }
                };
                return cell;
            }
        };

        viewCol.setCellFactory(cellFactory);

        return viewCol;
    }
    public String getRollNo() {
        return rollNo;
    }
    public void setRoll(String rollNo) {
        this.rollNo = rollNo;
    }   

Проблема со мной:

  • Моя таблица хорошо показывает оба столбца
  • Но он не печатает "Roll" на выходе.

Пожалуйста, скажите мне, как я могу это сделать ... Заранее спасибо

1 Ответ

0 голосов
/ 17 ноября 2018

static не допускается для объявлений локальных переменных, а TableView.getItems возвращает ObservableList, а не Student. Получите доступ к экземпляру Student через TableRow. (Если вы отобразите все кнопки в строке, а не в столбце, требуемая логика будет совсем другой.)

private final Button btn = new Button("View");

{

    btn.setOnAction((ActionEvent event) -> {
        Student stu = getTableRow().getItem();
        String res = stu.getRollNo().toString();
        System.out.println(res);
    });
}

@Override
public void updateItem(Void item, boolean empty) {
    super.updateItem(item, empty);
    setGraphic(empty ? null : btn);
}
...