TextField 未按预期工作。 Java
TextField not work as expected. Java
我尝试构建一个基本的计算器。当我单击按钮编号时,我希望该 textField 用作计算器(例如按 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.*;
import java.util.List;
public class main {
public static void main(String[] args) {
JFrame frame = new JFrame();
JTextField textField = new JTextField();
List<JButton> list = Buttons.generateButtons(frame);
String displayOnTextField = Buttons.displayOnTextField(list,textField);
frame.setSize(400,600);
textField.setBounds(150,40,150,30);
frame.add(textField);
frame.setLayout(null);
frame.setVisible(true);
}
}
谢谢。
您要附加的字符串是 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);
并在 actionPerformed 方法中设置文本如下
field.setText(field.getText() + finalStr);
它会为你工作...
我尝试构建一个基本的计算器。当我单击按钮编号时,我希望该 textField 用作计算器(例如按 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.*;
import java.util.List;
public class main {
public static void main(String[] args) {
JFrame frame = new JFrame();
JTextField textField = new JTextField();
List<JButton> list = Buttons.generateButtons(frame);
String displayOnTextField = Buttons.displayOnTextField(list,textField);
frame.setSize(400,600);
textField.setBounds(150,40,150,30);
frame.add(textField);
frame.setLayout(null);
frame.setVisible(true);
}
}
谢谢。
您要附加的字符串是 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);
并在 actionPerformed 方法中设置文本如下
field.setText(field.getText() + finalStr);
它会为你工作...