1

データベースからタスクをリストし、ユーザーがデータベースで要求されたタスクを登録できるように、各行にボタンを表示するJavaFXでプログラムを作成しています。このリンクのコードを使用して、各行のボタンを支援しました: https://gist.github.com/jewelsea/3081826

ただし、プログラムに合わせてコードを変更した後、cellButton 変数のアクションの設定に関してエラーが発生します。念のため、このメソッドを呼び出すクラスも追加しました。

CANNOT FIND SYMBOL CONSTRUCTOR, EVENTHANDLER DOES NOT TAKE PARAMETERS.. & METHOD NOT OVERRIDE or IMPLEMENT A METHOD FROM A SUPERTYPE (このエラーは、最初の 2 つのエラーの結果であると推測しています)。

//Define the button cell
private class ButtonCell extends TableCell<task, Boolean> {
    final Button cellButton = new Button("Claim");


    ButtonCell(){

        //Action when the button is pressed

        cellButton.setOnAction(new EventHandler<ActionEvent>() {

            @Override
            public void handle(ActionEvent t) {
                // get Selected Item
                task currentPerson = (task) ButtonCell.this.getTableView().getItems().get(ButtonCell.this.getIndex());
                //remove selected item from the table list
                newMan.claimTask(currentPerson.getTaskID());
            }
        });
    }

    //Display button if the row is not empty
    @Override
    protected void updateItem(Boolean t, boolean empty) {
        super.updateItem(t, empty);
        if(!empty){
            setGraphic(cellButton);
        }
    }
}

バツ

   private TableView createTasksTable() {

    TableView tableView = new TableView();

    TableColumn<task,String> firstNameCol = new TableColumn<>("Task");
    firstNameCol.setCellValueFactory(new Callback<CellDataFeatures<task, String>,                    ObservableValue<String>>() {
    @Override
    public ObservableValue<String> call(CellDataFeatures<task, String> p) {
     // p.getValue() returns the Person instance for a particular TableView row

     return new SimpleStringProperty(p.getValue().getName());
 }
  });

     //Insert Button
    TableColumn col_action = new TableColumn<>("Action");
    tableView.getColumns().add(col_action);

    col_action.setCellValueFactory(
            new Callback<TableColumn.CellDataFeatures<task, Boolean>, 
            ObservableValue<Boolean>>() {

        @Override
        public ObservableValue<Boolean> call(TableColumn.CellDataFeatures<task, Boolean> p) {
            return new SimpleBooleanProperty(p.getValue() != null);
        }
    });

    //Adding the Button to the cell
    col_action.setCellFactory(
            new Callback<TableColumn<task, Boolean>, TableCell<task, Boolean>>() {

        @Override
        public TableCell<task, Boolean> call(TableColumn<task, Boolean> p) {
            return new ButtonCell();
        } });


    tableView.getColumns().addAll(firstNameCol);


    return tableView;

}
4

1 に答える 1

2

おそらく間違ったEventHandler. あなたが持っていることを確認してください

import javafx.event.EventHandler ;

awtからのものではありません。

于 2014-12-28T19:18:23.903 に答える