Следующий код производит JFrame
, содержащий JFXPanel
и JPanel
. Каждая из панелей содержит текстовое поле.Почему JFXPanel дает фокус TextField
JFXPanel fxPanel = new JFXPanel();
JPanel swingPanel = new JPanel(new FlowLayout());
swingPanel.add(new JTextField("Swing"));
JPanel contentPanel = new JPanel(new BorderLayout());
contentPanel.add(fxPanel, BorderLayout.PAGE_START);
contentPanel.add(swingPanel, BorderLayout.CENTER);
JFrame frame = new JFrame("Main Frame");
frame.setContentPane(contentPanel);
FlowPane root = new FlowPane();
root.getChildren().add(new TextField("FX"));
Scene scene = new Scene(root);
Platform.runLater(() -> fxPanel.setScene(scene));
SwingUtilities.invokeLater(() -> frame.setVisible(true));
Предположим, что мы начинаем с ориентированного текстового поля Swing. Тогда предположим, что я нажимаю внутри JFXPanel
(но не в пределах его текстового поля). JFXPanel
дает фокус на TextField
.
Почему это происходит? Почему JFXPanel не сохраняет свой собственный фокус? Почему это дает текстовое поле? Как он выбирает, с какими из его компонентов следует сосредоточиться? Каков правильный способ предотвратить его сосредоточение на текстовом поле?
Итак, вызов 'root.setFocusTraversable (true);' приведет к поведению, которое хочет OP? –
@James_D, похоже, к сожалению нет. – DVarga
То же самое можно сказать о ложном обращении с фокусом, или что же происходит с этим подходом? – UtterlyConfused