代码之家  ›  专栏  ›  技术社区  ›  Allain Lalonde

如何让inputverifier使用可编辑的jcombobox

  •  3
  • Allain Lalonde  · 技术社区  · 16 年前

    我有一个 JComboBox 有习俗 inputVerifyer 设置为“可编辑”时限制最大长度。

    似乎从未调用verify方法。
    相同的verifyer在 JTextField 好的。

    我可能做错什么了?

    2 回复  |  直到 7 年前
        1
  •  8
  •   Allain Lalonde    16 年前

    我找到了一个解决办法。我想我会让下一个有这个问题的人知道。

    基本上。不要在组合框上设置inputverifier,而是将其设置为“编辑器组件”。

    JComboBox combo = new JComboBox();
    JTextField tf = (JTextField)(combo.getEditor().getEditorComponent());
    tf.setInputVerifier(verifyer);
    
        2
  •  1
  •   Tom Hawtin - tackline    16 年前

    给我们看一小段代码。

    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. 我建议避免这种讨厌的用户界面解决方案。