JTextField一次只允许一个字母?

时间:2014-03-05 19:48:49

标签: java swing jbutton jtextfield jlist

我正在尝试创建一个应用程序,用户点击按钮/或点击进入,输入进入JList。我已成功创建了应用程序,但在清除输入的JTextField时遇到了一个小问题。它只允许我一次输入一个符号。如果我从ActionListener和KeyListener:

中取出它,它将起作用
textField.setText("");

有没有办法让用户可以根据需要输入多少个符号?我的代码的错误部分是:

final JButton btnAdd = new JButton("ADD");
    btnAdd.setToolTipText("Add the item to the list");
    btnAdd.setBounds(157, 98, 68, 23);
    contentPane.add(btnAdd);
    btnAdd.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent ae) {
            v.add(textField.getText());
            list.setListData(v);
            textField.setText("");
        }
    });

    textField = new JTextField();
    textField.setToolTipText("Enter the item here");
    textField.setBounds(10, 99, 137, 20);
    contentPane.add(textField);
    textField.setColumns(10);
    textField.addKeyListener(new KeyAdapter(){
        public void keyPressed(KeyEvent ke){
            btnAdd.setEnabled(true);

            if(ke.getKeyCode()==KeyEvent.VK_ENTER)
                btnAdd.doClick();
                textField.setText("");
        }
    });

3 个答案:

答案 0 :(得分:2)

public void keyPressed(KeyEvent ke){
        btnAdd.setEnabled(true);

        if(ke.getKeyCode()==KeyEvent.VK_ENTER)
            btnAdd.doClick();
            textField.setText("");
}

你的textField.setText(“”);是if语句的外部。因此,每次用户按下某个键时,您的文本字段都会清除。

应该是:

public void keyPressed(KeyEvent ke){
        btnAdd.setEnabled(true);

        if(ke.getKeyCode()==KeyEvent.VK_ENTER){
            btnAdd.doClick();
            textField.setText("");
        }
}

答案 1 :(得分:1)

简单回答:在if语句旁边添加大括号!你有这个:

if(ke.getKeyCode()==KeyEvent.VK_ENTER)
  btnAdd.doClick();
  textField.setText("");

这相当于:

if(ke.getKeyCode()==KeyEvent.VK_ENTER) {
  btnAdd.doClick();
}

textField.setText("");

你应该对所有if语句使用大括号,无论多小:

if(ke.getKeyCode()==KeyEvent.VK_ENTER) {
  btnAdd.doClick();
  textField.setText("");
}

你所做的是导致textField.setText()在每次按键时发生。

答案 2 :(得分:1)

不要在文本组件上使用KeyListener,最后可能会出现突变,文本组件可能会消耗掉键,从不会到达听众,也不会考虑到用户将内容粘贴到字段中。

根据您的示例,您应该只使用ActionListener,事实上,您可以使用添加到按钮中的同一个

ActionListener listener = new ActionListener(){
    public void actionPerformed(ActionEvent ae) {
        v.add(textField.getText());
        list.setListData(v);
        textField.setText("");
    }
};

btnAdd.addActionListener(listener)(

textField = new JTextField();
textField.addActionListener(listener);

请查看How to use text fields了解详情

请勿在组件上使用setSizesetLocationsetBounds。您应该依赖适当的布局管理器。现代UI预计将在不同的平台上运行,具有不同的屏幕分辨率,dpi,字体度量和渲染管道,所有这些都会影响屏幕上文本的大小...