Select ListView 项目只能通过左键单击它们
Select ListView items only by left-clicking them
使用 JavaFX ListView 时,如果您右键单击 一个项目,该项目将selected。
是否可以仅 select 如果您左键单击 一个项目?
只需过滤 MOUSE_PRESSED 事件,检查辅助按钮是否按下,使用它并在需要时添加自定义处理代码。
右键单击还可以在 OS X 触摸板上触发 ContextMenuEvent.CONTEXT_MENU_REQUESTED
事件(有些奇怪的是,此类事件会触发选择),因此还要过滤和使用这些事件。
这对我有用:
public class ListViewSample extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("List View Sample");
ListView<String> list = new ListView<String>();
ObservableList<String> items =FXCollections.observableArrayList ( "Single", "Double", "Suite", "Family App");
list.setItems(items);
// filter right mouse button
list.addEventFilter(MouseEvent.MOUSE_PRESSED, e ->
{
if( e.isSecondaryButtonDown()) {
e.consume();
}
});
list.addEventFilter(ContextMenuEvent.CONTEXT_MENU_REQUESTED, Event::consume);
// verify selection via logging
list.getSelectionModel().selectedItemProperty().addListener(
(ChangeListener<String>) (observable, oldValue, newValue) -> System.out.println( "Item selected: " + observable + ", " + oldValue + ", " + newValue)
);
StackPane root = new StackPane();
root.getChildren().add(list);
primaryStage.setScene(new Scene(root, 200, 250));
primaryStage.show();
}
}
也许这可以帮助
-控制器
@FXML
ListView<String> listT=new ListView<String>();
@FXML
Label lbl=new Label();
public void initialize(URL location, ResourceBundle resources) {
listT=new Listv(listT);
}
class 扩展列表视图
public class Listv extends ListView<String>{
ListView<String> llist=new ListView<String>();
int PrevIndex=0;
public Listv(ListView<String> l) {
this.llist=l;
llist.getItems().add("A");
llist.getItems().add("A");
llist.getItems().add("A");
llist.getItems().add("A");
this.llist.setOnMouseClicked(listclicked);
this.llist.getSelectionModel().selectedIndexProperty().addListener(indexChanged);
}
EventHandler<MouseEvent> listclicked=new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
if( event.getButton() == MouseButton.SECONDARY)
{
Platform.runLater(()->{
llist.getSelectionModel().select(PrevIndex);
});
}
}
};
ChangeListener<Object> indexChanged=new ChangeListener<Object>() {
@Override
public void changed(ObservableValue<? extends Object> observable,Object oldValue, Object newValue) {
PrevIndex=Integer.parseInt(oldValue.toString());
}
};
}
使用 JavaFX ListView 时,如果您右键单击 一个项目,该项目将selected。
是否可以仅 select 如果您左键单击 一个项目?
只需过滤 MOUSE_PRESSED 事件,检查辅助按钮是否按下,使用它并在需要时添加自定义处理代码。
右键单击还可以在 OS X 触摸板上触发 ContextMenuEvent.CONTEXT_MENU_REQUESTED
事件(有些奇怪的是,此类事件会触发选择),因此还要过滤和使用这些事件。
这对我有用:
public class ListViewSample extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("List View Sample");
ListView<String> list = new ListView<String>();
ObservableList<String> items =FXCollections.observableArrayList ( "Single", "Double", "Suite", "Family App");
list.setItems(items);
// filter right mouse button
list.addEventFilter(MouseEvent.MOUSE_PRESSED, e ->
{
if( e.isSecondaryButtonDown()) {
e.consume();
}
});
list.addEventFilter(ContextMenuEvent.CONTEXT_MENU_REQUESTED, Event::consume);
// verify selection via logging
list.getSelectionModel().selectedItemProperty().addListener(
(ChangeListener<String>) (observable, oldValue, newValue) -> System.out.println( "Item selected: " + observable + ", " + oldValue + ", " + newValue)
);
StackPane root = new StackPane();
root.getChildren().add(list);
primaryStage.setScene(new Scene(root, 200, 250));
primaryStage.show();
}
}
也许这可以帮助
-控制器
@FXML
ListView<String> listT=new ListView<String>();
@FXML
Label lbl=new Label();
public void initialize(URL location, ResourceBundle resources) {
listT=new Listv(listT);
}
class 扩展列表视图
public class Listv extends ListView<String>{
ListView<String> llist=new ListView<String>();
int PrevIndex=0;
public Listv(ListView<String> l) {
this.llist=l;
llist.getItems().add("A");
llist.getItems().add("A");
llist.getItems().add("A");
llist.getItems().add("A");
this.llist.setOnMouseClicked(listclicked);
this.llist.getSelectionModel().selectedIndexProperty().addListener(indexChanged);
}
EventHandler<MouseEvent> listclicked=new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
if( event.getButton() == MouseButton.SECONDARY)
{
Platform.runLater(()->{
llist.getSelectionModel().select(PrevIndex);
});
}
}
};
ChangeListener<Object> indexChanged=new ChangeListener<Object>() {
@Override
public void changed(ObservableValue<? extends Object> observable,Object oldValue, Object newValue) {
PrevIndex=Integer.parseInt(oldValue.toString());
}
};
}