JTabbedPaneのタブ移動時にInputVerifierによる検証を実行する
Total: 2636
, Today: 1
, Yesterday: 1
Posted by aterai at
Last-modified:
概要
JTabbedPane
のタブ移動時にタブコンポーネントに設定されたInputVerifier
を実行し、その検証で入力が無効な場合はタブの切替をキャンセルします。
Screenshot
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