JComboBox
は、inputVerifyer
というカスタムを編集可能に設定したときにMaxLengthを制限するように設定されています。InputVerifierを編集可能なJComboBoxで動作させるにはどうすればいいですか
確認メソッドが呼び出されることはありません。
同じ検証ツールがJTextField
で呼び出されます。
何が間違っていますか?
JComboBox
は、inputVerifyer
というカスタムを編集可能に設定したときにMaxLengthを制限するように設定されています。InputVerifierを編集可能なJComboBoxで動作させるにはどうすればいいですか
確認メソッドが呼び出されることはありません。
同じ検証ツールがJTextField
で呼び出されます。
何が間違っていますか?
回避策が見つかりました。私はこの問題の次の人に知ってもらいたいと思った。
基本的には、 ComboBoxにinputVerifierを設定する代わりに、それを "Editor Component"に設定します。
JComboBox combo = new JComboBox();
JTextField tf = (JTextField)(combo.getEditor().getEditorComponent());
tf.setInputVerifier(verifyer);
コードの小さな部分を私たちに教えてください。
package inputverifier;
import javax.swing.*;
class Go {
public static void main(String[] args) {
java.awt.EventQueue.invokeLater(new Runnable() { public void run() {
runEDT();
}});
}
private static void runEDT() {
new JFrame("combo thing") {{
setLayout(new java.awt.GridLayout(2, 1));
add(new JComboBox() {{
setEditable(true);
setInputVerifier(new InputVerifier() {
@Override public boolean verify(JComponent input) {
System.err.println("Hi!");
return true;
}
});
}});
add(new JTextField());
setDefaultCloseOperation(EXIT_ON_CLOSE);
pack();
setVisible(true);
}};
}
}
Looks like it's a problem with JComboBox being a composite component.私は、このような厄介なUIソリューションを避けることをお勧めしたいです。