JTabbedPaneのタブ移動時にInputVerifierによる検証を実行する
Total: 3098, Today: 1, Yesterday: 1
Posted by aterai at
Last-modified:
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, KotlinDescription
- デフォルト
- タブ切り替え時に
JTextFieldにフォーカスが存在する場合はそのInputVerifierで妥当性の検証が実行されるが、入力が無効の場合でもタブの移動は実行されてしまう - Bug ID: JDK-4403182 InputVerifier failed on JTabbedPane & JMenuBar
- タブ切り替え時に
override SingleSelectionModel#setSelectedIndex(int): trueDefaultSingleSelectionModel#setSelectedIndex(int)をオーバーライドしたSingleSelectionModelをJTabbedPaneに設定- 現在表示中のタブの
InputVerifier#shouldYieldFocus(...)を実行し、入力が無効の場合はタブ切り替えの実行をキャンセルする - Java Swing JTextField setInputVerifier keep focus on TextField - Stack Overflow
Reference
- Bug ID: JDK-4403182 InputVerifier failed on JTabbedPane & JMenuBar
- Java Swing JTextField setInputVerifier keep focus on TextField - Stack Overflow