Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
TextField未按预期工作。JAVA_Java_Swing_Jbutton - Fatal编程技术网

TextField未按预期工作。JAVA

TextField未按预期工作。JAVA,java,swing,jbutton,Java,Swing,Jbutton,我试图建立一个基本的计算器。我希望在单击按钮编号时,该文本字段可以用作计算器(例如,按下154键,显示为154)。不幸的是,我没有得到正确的结果。例如,当我单击9时,我得到0123456789。我不知道如何将按钮int传递到和数组中,然后作为字符串检索 import javax.swing.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList;

我试图建立一个基本的计算器。我希望在单击按钮编号时,该文本字段可以用作计算器(例如,按下154键,显示为154)。不幸的是,我没有得到正确的结果。例如,当我单击9时,我得到0123456789。我不知道如何将按钮int传递到和数组中,然后作为字符串检索

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;
    }
}
import javax.swing.*;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.util.ArrayList;
导入java.util.List;
公共类按钮{
公共静态列表生成器按钮(JFrame){
列表按钮=新建ArrayList();
int x=20;
int y=500;
对于(int i=0;i<10;i++){
字符串str=Integer.toString(i);
添加(新的JButton(str));
按钮。获取(i)立根(x,y,50,50);
x+=60;
frame.add(buttons.get(i));
如果(x>=380){
x=20;
y=430;
}
}
返回按钮;
}
公共静态字符串displayOnTextField(列表,JTextField字段){
整数=0;
字符串str=“”;

对于(int i=0;i,您要追加的字符串是
finalStr
,它构建在一个循环中

    String returned = Integer.toString(i);
    str += returned;
    String finalStr = str;
如果不希望它附加前面的字符,请不要使用
+=
。您只需使用:

    String finalStr = Integer.toString(i);

您要附加的字符串是
finalStr
,它构建在循环中

    String returned = Integer.toString(i);
    str += returned;
    String finalStr = str;
如果不希望它附加前面的字符,请不要使用
+=
。您只需使用:

    String finalStr = Integer.toString(i);

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

            String returned = Integer.toString(i);
            str += returned;
            String finalStr = str;
因此,对于按钮0,最终字符串将为0;对于按钮1,最终字符串将01,依此类推

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

String finalStr =  Integer.toString(i);
执行的操作中方法设置文本如下

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

它将为您工作…

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

            String returned = Integer.toString(i);
            str += returned;
            String finalStr = str;
因此,对于按钮0,最终字符串将为0;对于按钮1,最终字符串将01,依此类推

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

String finalStr =  Integer.toString(i);
执行的操作中方法设置文本如下

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

这对你有用…

我知道,但问题是,如果我按照你的建议做,如果我按示例5,我得到5,但是如果我按4,我得到4,而不是54..那么你需要将字符串附加到传递给
setText
field.setText(field.getText()+finalStr)的内容中;
我知道,但问题是如果我按照你的建议做,如果我按5,我得到5,但是如果我按4,我得到4,而不是54..那么你需要将字符串附加到你传递给
setText
field.setText(field.getText()+finalStr)的内容中
还有一个问题,我想返回最后一个字符串…我怎么做?它应该在什么时候返回?例如,我想要150。我按1,5,0。它会显示出来,但同时我想得到150作为字符串,以便在以后的事情中实现,比如计算。取消理解?所以你会在某个事件上执行进一步的事情是那个事件吗?你能告诉我那个事件吗?在我得到字符串后,我想输入一个列表。之后列表将被填充,例如,如果我按下“+”,list将从displayOnTextField方法返回的字符串中求和。还有一个问题,我想返回最后的字符串…我怎么做?它应该在单击按钮时返回?例如,我想要150。我按1,5,0。它将显示,但同时我想得到150作为字符串,以便在进一步的事情中实现,如计算。不理解?那么你将对某个事件执行进一步的操作该事件是什么?你能告诉我该事件吗?在我得到字符串后,我想把它放入一个列表中。列表将被填充后,例如,如果我按“+”,列表将从displayOnTextField方法返回的字符串中求和。