TextField无法按预期工作。 Java的

时间:2018-06-07 10:29:52

标签: java swing jbutton

我尝试构建一个基本的计算器。当我点击按钮号码时,我希望textField作为计算器工作(例如按154并显示为154)。不幸的是我没有得到正确的结果。例如,当我单击9时,我得到0123456789.我不知道如何将按钮int传递给数组,然后以字符串形式检索。

match: {…}
 isExact: true
 params: {…}
    Empty object
 path: "/dashboard"
 url: "/dashboard"

主要:

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;

public class Buttons {
    public static List<JButton> generateButtons(JFrame frame) {
    List<JButton> buttons = new ArrayList<>();
    int x = 20;
    int y = 500;
    for (int i = 0; i < 10; i++) {
        String str = Integer.toString(i);
        buttons.add(new JButton(str));
        buttons.get(i).setBounds(x, y, 50, 50);
        x += 60;
        frame.add(buttons.get(i));
        if (x >= 380) {
            x = 20;
            y = 430;
        }
    }
    return buttons;
}
    public static String displayOnTextField(List<JButton> list,JTextField field){
        int number = 0;
        String str = "";
        for (int i = 0; i <list.size(); i++){
            String returned = Integer.toString(i);
            str += returned;
            String finalStr = str;
            list.get(i).addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    field.setText(finalStr);
                }
            });
        }
        return str;
    }
}

谢谢。

2 个答案:

答案 0 :(得分:3)

您要追加的字符串是finalStr,您可以在循环中构建。

    String returned = Integer.toString(i);
    str += returned;
    String finalStr = str;

如果您不希望它附加前面的字符,请不要使用+=。你可以简单地使用:

    String finalStr = Integer.toString(i);

答案 1 :(得分:0)

当您在循环中追加字符串时,您将从列表中存储的按钮中获取该字符串,如下所示

            String returned = Integer.toString(i);
            str += returned;
            String finalStr = str;

因此,对于按钮 0 ,对于按钮1,最终字符串将为0,最终字符串将为 01 ,依此类推

相反,您可以执行以下操作: 将 finalStr 字符串分配更改为

String finalStr =  Integer.toString(i);

并在 actionPerformed 方法中设置文本如下

field.setText(field.getText() + finalStr);

它会对你有用......