Je veux ajouter un menu contextuel à la tableview, plus précisément je veux afficher le menu contextuel sur les lignes de table sur un clic droit.Menu contextuel dans TableView JAVAFX 2.1
J'ai essayé avec ce code
final EventHandler click = new EventHandler() {
public void handle(MouseEvent t) {
}
@Override
public void handle(Event arg0) {
}
};
final Context menu = new ContextMenu();
MenuItem item = new MenuItem("Add Image");
item.setOnAction(new EventHandler() {
public void handle(ActionEvent t)
{
}
@Override
public void handle(Event arg0)
{
//some code here
}});
menu.getItems().addAll(item);
EditingCell cellFactory = new EditingCell(click,menu);
TableColumn col = new TableColumn("column1");
col.setCellFactory(cellFactory);
code ci-dessus fonctionne correctement dans JavaFX 2.0, et je reçois un menu contextuel sur clic droit, comment jamais quand je lance mon code avec JavaFX 2.1 Menu contextuel ne fonctionne pas .
J'ai essayé d'obtenir la méthode de menu contextuel montrant la propriété à l'aide showingProperty() et il est soit faux dans JavaFX 2.1 et vrai dans JavaFX 2.0
De plus, j'ai aussi essayé de faire ma classe cellfactory personnalisée et voici mon code (I il a fallu de l'exemple officiel JavaFX TreeView menu contextuel)
import javafx.event.Event;
import javafx.event.EventHandler;
import javafx.scene.control.*;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
class TextFieldTreeCellImpl extends TableCell<String,String> {
private TextField textField;
private ContextMenu addMenu = new ContextMenu();
public TextFieldTreeCellImpl() {
MenuItem addMenuItem = new MenuItem("Add Employee");
addMenu.getItems().add(addMenuItem);
addMenuItem.setOnAction(new EventHandler() {
public void handle(Event t) {
}
});
setContextMenu(addMenu);
}
@Override
public void startEdit() {
super.startEdit();
if (textField == null) {
createTextField();
}
setText(null);
setGraphic(textField);
textField.selectAll();
}
@Override
public void cancelEdit() {
super.cancelEdit();
setText((String) getItem());
//setGraphic(getTableCell().getGraphic());
}
@Override
public void updateItem(String item, boolean empty) {
super.updateItem(item, empty);
if (empty) {
setText(null);
setGraphic(null);
} else {
if (isEditing()) {
if (textField != null) {
textField.setText(getString());
}
setText(null);
setGraphic(textField);
} else {
setText(getString());
//setGraphic(getTreeItem().getGraphic());
}
}
}
private void createTextField() {
textField = new TextField(getString());
textField.setOnKeyReleased(new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent t) {
if (t.getCode() == KeyCode.ENTER) {
commitEdit(textField.getText());
} else if (t.getCode() == KeyCode.ESCAPE) {
cancelEdit();
}
}
});
}
private String getString() {
return getItem() == null ? "" : getItem().toString();
}
}
et j'ajouté cette cellfactory personnalisée comme:
final Callback<TableColumn, TableCell> cellFactory =
new Callback<TableColumn, TableCell>() {
public TableCell call(TableColumn p) {
return new TextFieldTreeCellImpl();
}
};
col.setCellFactory(cellFactory);
Toujours est wo rking bien dans JavaFX 2.0, mais pas dans JavaFX 2.1
S'il vous plaît aidez-moi, je suis un moment difficile ...
Est-ce un bogue dans JavaFX 2.1? – Deepak