2016-04-06 4 views
0

betrachten Sie diese einfache App:Focus Traversable auf CustomMenuItem. Inhalt lose Fokus auf Maus Hover

Drücken Sie Strg + Leerzeichen auf dem Textfeld die ListView erscheinen mit dem Fokus und Sie können mit der Pfeiltaste auswählen. aber wenn du die Maus über die listView bewegst, hat das customMenuItem die Hover highlight und der listview loose focus die Arrow Taste funktioniert nicht mehr

Wie kann ich mich auf die Listview konzentrieren?

 
import java.util.ArrayList; 
import java.util.List; 
import javafx.application.Application; 
import javafx.collections.FXCollections; 
import javafx.geometry.Side; 
import javafx.scene.Scene; 
import javafx.scene.control.ContextMenu; 
import javafx.scene.control.CustomMenuItem; 
import javafx.scene.control.ListView; 
import javafx.scene.control.TextField; 
import javafx.scene.input.KeyCode; 
import javafx.scene.input.KeyEvent; 
import javafx.scene.layout.HBox; 
import javafx.stage.Stage;

public class Main extends Application { @Override public void start(Stage primaryStage) { try { HBox root = new HBox(new SuggestionTextFiedl());

Scene scene = new Scene(root, 400, 400); scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm()); primaryStage.setScene(scene); primaryStage.show(); } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { launch(args); } public class SuggestionTextFiedl extends TextField { ListView<String> lv = new ListView<>(); CustomMenuItem lvContainer = new CustomMenuItem(lv); ContextMenu contextMenu = new ContextMenu(lvContainer); public SuggestionTextFiedl() { super(); List<String> content = new ArrayList<>(); content.add("item1"); content.add("item2"); content.add("item3"); content.add("item1"); content.add("item2"); content.add("item3"); lv.setItems(FXCollections.observableList(content)); lv.setPrefWidth(100); lv.setPrefHeight(100); this.addEventHandler(KeyEvent.KEY_RELEASED, e -> { if (e.getCode().equals(KeyCode.SPACE) && e.isControlDown()) { System.out.println("ici"); contextMenu.show(SuggestionTextFiedl.this, Side.BOTTOM, 0, 0); lv.requestFocus(); } }); } } }

Antwort

0

Meine Lösung nicht sicher, dass der richtige Weg

 contextMenu.addEventFilter(MouseEvent.MOUSE_ENTERED_TARGET, e -> { 

      e.consume(); 

     });