Swing/OptionPaneDefaultFocus のバックアップの現在との差分(No.1)
TITLE:JOptionPaneのデフォルトフォーカス
Posted by terai at 2009-11-23
JOptionPaneのデフォルトフォーカス
JOptionPaneにデフォルトでフォーカスをもつコンポーネントを追加します。- category: swing folder: OptionPaneDefaultFocus title: JOptionPaneのデフォルトフォーカス tags: [JOptionPane, Focus, JComponent, WindowListener, HierarchyListener, AncestorListener] author: aterai pubdate: 2009-11-23T19:41:03+09:00 description: JOptionPaneにデフォルトでフォーカスをもつコンポーネントを追加します。 image:
概要
JOptionPane
にデフォルトでフォーカスをもつコンポーネントを追加します。
- &jnlp;
- &jar;
- &zip;
Screenshot
Advertisement
#screenshot
サンプルコード
#spanend
#spanadd
* サンプルコード [#sourcecode]
#spanend
#spanadd
#code(link){{
#spanend
textField4.addAncestorListener(new AncestorListener() {
public void ancestorAdded(AncestorEvent event) {
textField4.requestFocusInWindow();
@Override public void ancestorAdded(AncestorEvent e) {
e.getComponent().requestFocusInWindow();
}
public void ancestorMoved(AncestorEvent event) {}
public void ancestorRemoved(AncestorEvent event) {}
#spanadd
#spanend
@Override public void ancestorMoved(AncestorEvent e) {
/* not needed */
}
#spanadd
#spanend
@Override public void ancestorRemoved(AncestorEvent e) {
/* not needed */
}
});
解説
上記のサンプルでは、JOptionPane.showConfirmDialogで表示するJTextFieldにデフォルトのフォーカスがあたるように設定しています。解説
上記のサンプルでは、JOptionPane.showConfirmDialog
で表示するJTextField
にデフォルトのフォーカスがあたるように設定しています。
- 左上
- デフォルト
- 右上
- JOptionPane#createDialog(...)でJDialogを取得し、WindowListener#windowOpenedで、textField.requestFocusInWindow()
- 左上:
Default
- デフォルトの
ConfirmDialog
の場合、初期フォーカスは入力欄ではなくOK
ボタンにある#spanend #spanadd int result = JOptionPane.showConfirmDialog( #spanend frame, textField, "Input Text", JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE); #spanadd if (result == JOptionPane.OK_OPTION) { #spanend textArea.setText(textField.getText()); #spanadd } #spanend #spanadd
- デフォルトの
- 右上:
WindowListener
-
JOptionPane#createDialog(...)
でJDialog
を取得しWindowListener#windowOpened
でtextField.requestFocusInWindow();
を実行 - Windowを開いたときのフォーカスを指定など
-
- 左下
- textFieldにHierarchyListenerを追加し、hierarchyChangedが呼ばれたときに、textField.requestFocusInWindow()
- 右下
- textFieldにaddAncestorListenerを追加し、ancestorAddedが呼ばれたときに、textField.requestFocusInWindow()
- Swing - Input focus
#spanend #spanadd JOptionPane pane = new JOptionPane( #spanend textField, JOptionPane.PLAIN_MESSAGE, JOptionPane.OK_CANCEL_OPTION, null, null, null); #spanadd JDialog dialog = pane.createDialog(frame, "Input Text"); #spanend #spanadd dialog.addWindowListener(new WindowAdapter() { #spanend @Override public void windowOpened(WindowEvent e) { textField.requestFocusInWindow(); } #spanadd }); #spanend #spanadd dialog.setVisible(true); #spanend #spanadd Object selectedValue = pane.getValue(); #spanend #spanadd int result = JOptionPane.CLOSED_OPTION; #spanend #spanadd if (selectedValue != null && selectedValue instanceof Integer) { #spanend result = ((Integer) selectedValue).intValue(); #spanadd } #spanend #spanadd if (result == JOptionPane.OK_OPTION) { #spanend textArea.setText(textField.getText()); #spanadd } #spanend #spanadd
参考リンク
- Windowを開いたときのフォーカスを指定など
- Swing - Input focus
- 左下:
HierarchyListener
-
textField
にHierarchyListener
を追加しhierarchyChanged
が呼ばれたときにtextField.requestFocusInWindow();
を実行#spanend #spanadd textField3.addHierarchyListener(new HierarchyListener() { #spanend @Override public void hierarchyChanged(HierarchyEvent e) { if ((e.getChangeFlags() & HierarchyEvent.SHOWING_CHANGED) != 0 && textField3.isShowing()) { EventQueue.invokeLater(new Runnable() { @Override public void run() { textField3.requestFocusInWindow(); } }); } } #spanadd }); #spanend #spanadd int result = JOptionPane.showConfirmDialog( #spanend frame, textField3, "Input Text", JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE); #spanadd if (result == JOptionPane.OK_OPTION) { #spanend textArea.setText(textField3.getText()); #spanadd } #spanend #spanadd
-
コメント
- 右下:
AncestorListener
-
textField
にaddAncestorListener
を追加しancestorAdded
が呼ばれたときにtextField.requestFocusInWindow();
を実行 - Swing - Input focus
-