2016-09-17 91 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 ; 
    } 
});