Swing/TabbedPaneInputVerifier のバックアップ(No.14)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/TabbedPaneInputVerifier へ行く。
- 1 (2016-12-26 (月) 16:14:09)
- 2 (2017-02-20 (月) 19:40:38)
- 3 (2017-02-28 (火) 17:51:53)
- 4 (2017-04-07 (金) 13:51:51)
- 5 (2017-11-02 (木) 15:34:40)
- 6 (2017-11-30 (木) 16:39:47)
- 7 (2018-02-15 (木) 14:23:42)
- 8 (2019-08-01 (木) 22:54:12)
- 9 (2021-04-02 (金) 17:08:21)
- 10 (2022-08-20 (土) 22:15:25)
- 11 (2025-01-03 (金) 08:57:02)
- 12 (2025-01-03 (金) 09:01:23)
- 13 (2025-01-03 (金) 09:02:38)
- 14 (2025-01-03 (金) 09:03:21)
- 15 (2025-01-03 (金) 09:04:02)
- category: swing folder: TabbedPaneInputVerifier title: JTabbedPaneのタブ移動時にInputVerifierによる検証を実行する tags: [JTabbedPane, InputVerifier, Focus] author: aterai pubdate: 2016-12-26T16:12:59+09:00 description: JTabbedPaneのタブ移動時にタブコンポーネントに設定されたInputVerifierを実行し、その検証で入力が無効な場合はタブの切替をキャンセルします。 image: https://drive.google.com/uc?id=1E4H4aD4uZ-DBc_H6-KLuEEsZoyJqNxdHuQ
Summary
JTabbedPane
のタブ移動時にタブコンポーネントに設定されたInputVerifier
を実行し、その検証で入力が無効な場合はタブの切替をキャンセルします。
Screenshot
Advertisement
Source Code Examples
tabbedPane.setModel(new DefaultSingleSelectionModel() {
@Override public void setSelectedIndex(int index) {
InputVerifier verifier = p.getInputVerifier();
if (Objects.nonNull(verifier) && !verifier.shouldYieldFocus(p)) {
UIManager.getLookAndFeel().provideErrorFeedback(p);
JOptionPane.showMessageDialog(p, "InputVerifier#verify(...): false");
return;
}
super.setSelectedIndex(index);
}
});
View in GitHub: Java, KotlinExplanation
- デフォルト
- タブ切り替え時に
JTextField
にフォーカスが存在する場合はそのInputVerifier
で妥当性の検証が実行されるが、入力が無効の場合でもタブの移動は実行されてしまう - Bug ID: JDK-4403182 InputVerifier failed on JTabbedPane & JMenuBar
- タブ切り替え時に
override SingleSelectionModel#setSelectedIndex(int): true
DefaultSingleSelectionModel#setSelectedIndex(int)
をオーバーライドしたSingleSelectionModel
をJTabbedPane
に設定- 現在表示中のタブの
InputVerifier#shouldYieldFocus(...)
を実行し、入力が無効の場合はタブ切り替えの実行をキャンセルする - Java Swing JTextField setInputVerifier keep focus on TextField - Stack Overflow
参考リンク
- Bug ID: JDK-4403182 InputVerifier failed on JTabbedPane & JMenuBar
- Java Swing JTextField setInputVerifier keep focus on TextField - Stack Overflow