jbuttons和一个有动作监听器的jtextfield

时间:2015-04-01 06:45:17

标签: java swing jbutton actionlistener jtextfield

我有一个由jbuttons组成的键盘和一个带有动作监听器的jtextfield。当我按下按钮时,数字显示在文本字段中,但下一个数字会覆盖它。任何人都可以告诉我如何将文本附加到长度为13的数字以及何时可以回车。

如果我使用键盘输入数字,我可以输入一串数字,但不能从按钮输入。

我正在使用:

    JButton buttonNo2 = new JButton("2");
    buttonNo2.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            textfield.setText("2");
        }

buttonNo1.setBounds(11, 18, 50, 50);
    keyboardPanel.add(buttonNo2);
    buttonNo1.setForeground(Color.BLUE);
    buttonNo1.setFont(new Font("Perpetua", Font.BOLD, 20));

3 个答案:

答案 0 :(得分:1)

尝试使用类似

的内容
textfield.setText(textfield.getText() + "2");

而不是textfield.setText("2");

setText就是这样,将文本字段的文本设置为您指定的值。

同样buttonNo1.setBounds(11, 18, 50, 50);看起来像是在没有布局管理器的情况下尝试做的事情。避免使用null布局,像素完美布局是现代ui设计中的错觉。影响组件个体大小的因素太多,您无法控制。 Swing旨在与布局管理器一起工作,放弃这些将导致问题和问题的终结,您将花费越来越多的时间来纠正

您也可以让自己更简单,并使用Action API代替,这样可以避免重复输入...

public class NumberAction extends AbstractAction {

    private JTextField field;
    private int number;

    public NumberAction(JTextField field, int number) {
        this.field = field;
        this.number = number;
        putValue(NAME, Integer.toString(number));
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        Document doc = field.getDocument();
        try {
            doc.insertString(doc.getLength(), Integer.toString(number), null);
        } catch (BadLocationException ex) {
            ex.printStackTrace();
        }
    }

}

然后你只需要根据需要添加每个按钮......

add(new JButton(new NumberAction(textfield, 1)));
add(new JButton(new NumberAction(textfield, 2)));
add(new JButton(new NumberAction(textfield, 3)));

有关详细信息,请参阅How to Use Actions

答案 1 :(得分:0)

您必须先获取文本,然后通过附加上一个和当前文本来设置文本。 public void actionPerformed(ActionEvent e){             String str = textfield.getText();             textfield.setText(str +打印的数字);         }

答案 2 :(得分:0)

正如@MadProgrammer已发布如何使用JTextField实现它, 您可以选择JTextArea#append method

  

public void append(String str)

     

将给定文本附加到文档的末尾。什么都没有   model为null或字符串为null或空。

     

参数:       str - 要插入的文本