2016-09-17 90 views

回答

3

这是代码,你可以关闭标准的文本菜单和工具自己的处理程序与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()); 
     } 
     } 
    }); 

我不知道很好这个库,但它的作品好。 实例它的工作原理:

enter image description here

我的程序:

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(); 
    } 
} 
+0

感谢您的努力,但不知何故,它不适合我,你能否粘贴你的整个程序。 – DeepInJava

+0

我添加了我的程序 – BadVegan

+0

现在它适用于我。我的项目当时没有正确构建。抱歉! – DeepInJava

0

它使用上点击鼠标时,检查表视图并点击它的鼠标处理火灾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 ; 
    } 
});