我正在使用此代码来实现select listener:
treeView.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<TreeItem<DynamicTreeNodeModel>>()
{
@Override
public void changed(ObservableValue<? extends TreeItem<DynamicTreeNodeModel>> observable, TreeItem<DynamicTreeNodeModel> oldValue, TreeItem<DynamicTreeNodeModel> newValue)
{
System.out.println("Selected Text : " + newValue.getValue());
........
}
}
我只想在用鼠标左键单击时才使用更改侦听器。我怎么能这样做?
答案 0 :(得分:7)
treeView.addEventFilter(MouseEvent.MOUSE_PRESSED, new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
if (event.isSecondaryButtonDown()){
//do right click stuff
event.consume();
}
}
});
如果您仍想要进行选择更改,这可能是最简单的方法。如果按下右键,我会设置一个标志。您可以在更改侦听器中以相同的方式获取所选的TreeItem。
package treeselect;
import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeView;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class TreeSelect extends Application {
private boolean isRightClick;
@Override
public void start(Stage stage) {
final Label sel = new Label();
TreeView treeView = new TreeView(new TreeItem("root"));
for (int i = 0; i < 10; i++) {
treeView.getRoot().getChildren().add(new TreeItem("name" + i));
}
treeView.setMinWidth(100);
treeView.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<TreeItem>() {
@Override
public void changed(ObservableValue observable, TreeItem oldValue, TreeItem newValue) {
if (newValue != null) {
if (isRightClick) {
//do all right click stuff here
//the selected item is newValue
sel.setText("Right click on " + newValue.toString());
//reset the flag
isRightClick = false;
} else {
//do your regular change stuff here
sel.setText("Not Right Click on " + newValue.toString());
}
}
}
});
treeView.addEventFilter(MouseEvent.MOUSE_PRESSED, new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
if (event.isSecondaryButtonDown()) {
isRightClick = true;
}
}
});
VBox root = new VBox();
root.getChildren().addAll(treeView, sel);
Scene scene = new Scene(root, 400, 300);
stage.setScene(scene);
stage.show();
}
}
答案 1 :(得分:1)
对于JavaFX 8,您可以使用event.getButton() == MouseButton.PRIMARY
for JavaFX 2.2,event.isPrimaryButtonDown()
for Java AWT,event.getButton() == MouseButton.BUTTON1