我有一个由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));
答案 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 - 要插入的文本