【问题标题】:JavaFx Spreadsheet Cell Right Click Open DialogJavaFx 电子表格单元格右键单击打开对话框
【发布时间】:2016-09-17 20:13:44
【问题描述】:

我是 ControlsFx Api 的电子表格功能的新手。我想在 Javafx 中右键单击 SpreadsheetcellSpreadsheetView 打开 Dialog。非常感谢任何帮助。

【问题讨论】:

  • 您好,您想右键点击后直接显示对话框吗?
  • @BadVegan,是的,我想在右击单元格后直接显示对话框。

标签: java javafx event-handling controlsfx


【解决方案1】:

这是您可以脱离标准 ContextMenu 并使用 Dialog 实现自己的处理程序的代码,在此示例中为 TextInputDialog

  SpreadsheetView spreadsheetView = new SpreadsheetView();
    //off the standard ContextMenu
    spreadsheetView.setContextMenu(null);
   //set own handler for right click with Dialog
    spreadsheetView.setOnContextMenuRequested(new EventHandler<ContextMenuEvent>() {
      @Override public void handle(ContextMenuEvent event) {
        CellView cellView = (CellView) event.getTarget();
        TextInputDialog dialog = new TextInputDialog(cellView.getText());
        Optional<String> result = dialog.showAndWait();
        if (result.isPresent()){
          System.out.println(cellView.getText());
        }
      }
    });

我不太了解这个库,但它很好用。 工作原理示例:

我的程序:

public class MainController extends Application {

  public static void main(String[] args) {
    launch(args);
  }

  @Override public void start(Stage primaryStage) throws Exception {


    SpreadsheetView spreadsheetView = new SpreadsheetView();
    //off the standard ContextMenu
    spreadsheetView.setContextMenu(null);
    //set own handler for right click with Dialog
    spreadsheetView.setOnContextMenuRequested(new EventHandler<ContextMenuEvent>() {
      @Override public void handle(ContextMenuEvent event) {
        CellView cellView = (CellView) event.getTarget();
        TextInputDialog dialog = new TextInputDialog(cellView.getText());
        Optional<String> result = dialog.showAndWait();
        if (result.isPresent()) {
          System.out.println(cellView.getText());
        }
      }
    });

    HBox hBox = new HBox();
    hBox.getChildren().add(spreadsheetView);
    Scene scene = new Scene(hBox);
    primaryStage.setScene(scene);
    primaryStage.show();
  }
}

【讨论】:

  • 感谢您的努力,但不知何故它对我不起作用,请您粘贴您的整个程序。
  • 我添加了我的程序
  • 它现在对我有用。我的项目当时没有正确构建。对不起!
【解决方案2】:

它在表格视图上使用鼠标处理程序,该处理程序检查何时单击鼠标并在单击时触发 fx 中的新对话框,然后接受输入并更新 fx 表格视图。

table.setOnMousePressed(new          EventHandler<MouseEvent>() {
     @Override 
    public void handle(MouseEvent event) {
        if (event.getClickCount() == 1) {
            Call dialogue method of java fx           
        }
    }
});

或者如果你想右键点击你可以创建单元格

例如

FirstNameCol.setCellFactory(new Callback<TableColumn<Person, String>, TableCell<Person, String>>() {
    @Override
    public TableCell<Person, String> call(TableColumn<Person, String> col) {
        final TableCell<Person, String> cell = new TableCell<>();
        cell.textProperty().bind(cell.itemProperty()); // in general might need to subclass TableCell and override updateItem(...) here
        cell.setOnMouseClicked(new EventHandler<MouseEvent>() {
            @Override
            public void handle(MouseEvent event) {
                if (event.getButton == MouseButton.SECONDARY) {
                    // handle right click on cell...
                    // access cell data with cell.getItem();
                    // access row data with (Person)cell.getTableRow().getItem();
                }
            }
        });
        return cell ;
    }
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-31
    • 1970-01-01
    • 1970-01-01
    • 2013-09-07
    • 2019-09-22
    相关资源
    最近更新 更多