次のコードは、JFXPanel
とJPanel
を含むJFrame
を生成します。各パネルにはテキストフィールドがあります。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));
まず、スイングテキストフィールドにフォーカスを当ててみましょう。次に、JFXPanel
の内部をクリックしたとします(ただし、テキストフィールドの境界内にはありません)。 JFXPanel
は、TextField
に焦点を当てています。
どうしてですか?なぜJFXPanelはそれ自体の焦点を維持していないのですか?なぜそれがテキストフィールドにそれを与えるのですか?どのコンポーネントに焦点を当てるかをどのように選択しますか?テキストフィールドに焦点を当てるのを防ぐ正しい方法は何ですか?
したがって、 'root.setFocusTraversable(true);を呼び出すと、OPが望む動作になりますか? –
@ James_Dは、残念ながらそうではありません。 – DVarga
フォーカスのトラバース可能な説明は間違っていますか、そうでない場合は、このアプローチに間違いがありますか? – UtterlyConfused