Swing/TabbedPaneInputVerifier のバックアップ(No.6)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/TabbedPaneInputVerifier へ行く。
- 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?export=view&id=1E4H4aD4uZ-DBc_H6-KLuEEsZoyJqNxdHuQ
概要
JTabbedPane
のタブ移動時にタブコンポーネントに設定されたInputVerifier
を実行し、その検証で入力が無効な場合はタブの切替をキャンセルします。
Screenshot
![Swing/TabbedPaneInputVerifier screenshot](https://ateraimemo.com/swing/tabbedpaneinputverifier/screenshot.png)
Advertisement
サンプルコード
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, Kotlin解説
- デフォルト
- タブ切替時に
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