2016-09-17 3 views
1

Я новичок в функции SpreadSheet ControlsFx Api. Я хотел бы открыть Dialog правой кнопкой мыши Spreadsheetcell из SpreadsheetView в Javafx. Любая помощь приветствуется.Ячейка электронных таблиц JavaFx Щелкните правой кнопкой мыши Открыть диалог

+0

Здравствуйте, вы хотите, чтобы показать диалог непосредственно после правой кнопкой мыши? – BadVegan

+0

@BadVegan, да, я хочу показать диалог непосредственно после щелчка правой кнопкой мыши. – DeepInJava

ответ

3

это код, где вы можете от стандартной 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()); 
     } 
     } 
    }); 

Я не знаю, очень хорошо эту библиотеку, но она хорошо работает. Пример, как это работает:

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   
     } 
    } 
}); 

Или, если вы хотите, щелкните правой кнопкой мыши вы можете создать клетки

Eg

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 ; 
    } 
}); 
Смежные вопросы