当前位置: 首页 > 知识库问答 >
问题:

jbuttons和具有动作侦听器的jtextfield

宋朝
2023-03-14

我有一个小键盘,由j按钮和一个jtext字段,有一个动作侦听器。当我按下按钮时,数字显示在文本字段中,但下一个数字会覆盖它。有人能告诉我如何将文本附加到长度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个答案

郑波
2023-03-14

@MadProgrammer已经发布了如何使用JTextField实现它,您可以选择JTextArea#append方法

public void append(String str)

将给定文本追加到文档末尾。如果模型为null或字符串为null或空,则不执行任何操作。

参数:str-要插入的文本

相旭
2023-03-14

您必须先获取文本,并通过追加上一个文本和当前文本来设置文本。公共无效操作执行(操作事件e){字符串str=textfield.get文本();textfield.set文本(str打印的数字);}

卫仲卿
2023-03-14

试着用类似的东西

textfield.setText(textfield.getText() + "2");

而不是textfield。setText(“2”)

setText执行此操作,将文本字段的文本设置为您指定的值。

另外ButtonNo1.setBound(11, 18, 50, 50);看起来像你试图做没有布局管理器。避免使用null布局,像素完美布局是现代用户界面设计中的一种错觉。有太多的因素会影响组件的单个大小,没有一个你可以控制。Swing旨在与核心的布局管理器一起工作,丢弃这些将导致无穷无尽的问题和问题,你将花费越来越多的时间试图纠正

您还可以让自己的操作简单得多,改用ActionAPI,这样可以节省大量重复输入的时间。。。

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)));

有关详细信息,请参阅如何使用操作

 类似资料:
  • 下面的代码是项目的动作侦听器。基本上,我有 4 个单选按钮,当我单击一个时,我希望它更改屏幕上的变量。当我运行代码时,它只是将所有值相加。还有其他方法可以做到这一点吗?

  • 问题内容: 我很好奇这两种执行ajax调用的方式有什么区别: 和 看来人们使用第一种方法的频率更高,但是第二种方法似乎也能正常工作… 问题答案: 第一种方法允许通过返回结果进行导航,而第二种则不能。如果客户端禁用了JS,第二种方法将不会调用任何内容,而第一种方法会正常降级。确实,第一种方法被更频繁地使用。 第二种方法是组件中没有属性的唯一方法,例如等等。

  • 问题内容: 我怎样才能使它成为特定方法? (我知道可以用一种方法将其全部抛弃,是的。 谢谢你们, 编辑:谢谢大家的快速反应,我的解释不是很清楚。 我调查了lambda的使用,这几乎是我在想的,尽管其他方式也很不错。 再次谢谢大家。 下次我会尝试变得更清晰,更快捷。 问题答案: 同样,您的问题仍然不清楚。您上面的代码 有 一种方法,可以将代码放入其中: 或者,您可以从该方法中调用外部类的方法: 或者

  • 我们有web服务(jaxws),它正在调用另一个web服务(aslo jaxws)。Jaxws客户端配置如下所示-- 正如您所看到的,我们有两个拦截器和一个故障侦听器。我们希望在这些拦截器、故障侦听器和web服务代码之间进行通信。正如SO线程中所述,我们使用cxf交换对象在web服务和拦截器之间进行通信。 我们的inFaultInterceptor代码如下所示-- } Web服务代码如下所示- 但

  • 问题内容: 我有两个分别称为“左”和“右”。“左”按钮将矩形对象向左移动,“右”按钮将其向右移动。我在班上有一个充当单击任一按钮时的侦听器。但是,我希望单击每个动作时都会发生不同的动作。如何区分点击的? 问题答案: 将actionCommand设置到每个按钮。 //将动作命令设置到两个按钮上。 更新:

  • 问题内容: 可能有两堂课,而在一堂课中 在另一个 //更多原因是因为我需要将按钮(摆动)分离到动作监听器 我该怎么办? 谢谢 问题答案: 不仅可以将这两个部分分开,而且还建议这样做(请参阅MVC模式-非常有关分离屏幕控件(如按钮)和程序逻辑) 我想到的最简单的方法是编写一个实现接口的命名类,如下所示: 然后将其添加到您的按钮: