Java 按按钮将JTextField整数保存到数组中
我创建了这个简单的程序,我想让它做的是,当我按下一个按钮时,Java 按按钮将JTextField整数保存到数组中,java,swing,awt,Java,Swing,Awt,我创建了这个简单的程序,我想让它做的是,当我按下一个按钮时,JTextField中的整数值保存在一个数组中,我想通过多次按下按钮在该JTextField中输入许多值,然后将所有这些值相加并输出总和。我该怎么做 public class Test extends JFrame implements ActionListener { JTextField teArdhurat_JTF = new JTextField(15); JButton teArdhurat_JB = new
JTextField
中的整数值保存在一个数组中,我想通过多次按下按钮在该JTextField
中输入许多值,然后将所有这些值相加并输出总和。我该怎么做
public class Test extends JFrame implements ActionListener {
JTextField teArdhurat_JTF = new JTextField(15);
JButton teArdhurat_JB = new JButton("Fut");
public Test() {
setTitle("BILANCI");
setSize(370, 270);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container c = getContentPane();
c.setLayout(new FlowLayout());
JPanel teArdhurat_JP = new JPanel();
teArdhurat_JP.add(teArdhurat_JTF);
teArdhurat_JP.add(teArdhurat_JB);
c.add(teArdhurat_JP);
teArdhurat_JB.addActionListener(this);
}
public void actionPerformed(ActionEvent e) {
String teArdhurat_GT = teArdhurat_JTF.getText();
int teArdhurat = Integer.parseInt(teArdhurat_GT);
ArrayList<Integer> te_ardhurat = new ArrayList<Integer>(Arrays.asList());
//Here is the problem the next value that I enter overwrites the previous value
if (e.getSource() == teArdhurat_JB) {
te_ardhurat.add(teArdhurat);
}
int sum = 0;
for (int i = 0; i < te_ardhurat.size(); i++) {
sum = sum + te_ardhurat.get(i);
System.out.println(sum);
}
}
public static void main(String[] args) {
new Test();
}
}
公共类测试扩展JFrame实现ActionListener{
JTextField teArdhurat_JTF=新JTextField(15);
JButton teArdhurat_JB=新的JButton(“Fut”);
公开考试(){
setTitle(“BILANCI”);
设置大小(370270);
setVisible(真);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
容器c=getContentPane();
c、 setLayout(新的FlowLayout());
JPanel teArdhurat_JP=新的JPanel();
teArdhurat_JP.add(teArdhurat_JTF);
催泪弹JP.add(催泪弹JB);
c、 添加(teArdhurat_JP);
teArdhurat_JB.addActionListener(此);
}
已执行的公共无效操作(操作事件e){
字符串teArdhurat_GT=teArdhurat_JTF.getText();
int teArdhurat=Integer.parseInt(teArdhurat_GT);
ArrayList te_ardhurat=新的ArrayList(Arrays.asList());
//问题是,我输入的下一个值会覆盖上一个值
如果(例如getSource()==teArdhurat_JB){
添加(泪液);
}
整数和=0;
对于(int i=0;i
因为每次调用actionPerformed方法时,它都会创建一个没有数据的新ArrayList。此ArrayList的作用域一直到方法的末尾,并将存储在堆栈中
在您的案例中需要一个类成员变量
public class Test extends JFrame implements ActionListener {
JTextField teArdhurat_JTF = new JTextField(15);
JButton teArdhurat_JB = new JButton("Fut");
private final ArrayList<Integer> te_ardhurat = new ArrayList<Integer>(Arrays.asList());
公共类测试扩展JFrame实现ActionListener{
JTextField teArdhurat_JTF=新JTextField(15);
JButton teArdhurat_JB=新的JButton(“Fut”);
private final ArrayList te_ardhurat=新的ArrayList(Arrays.asList());
您的代码和组件的布局方式都不好。因此,我想从头开始编写一个解决方案。请仔细阅读,了解如何以更专业的方式布局swing组件
package com.java.demo;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.HeadlessException;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;
public class TestFrame extends JFrame {
List<Integer> numbers = new ArrayList<>();
public static void main(String[] args) {
new TestFrame();
}
private TestFrame() throws HeadlessException {
super();
this.setLocationByPlatform(true);
JPanel contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
GridBagLayout gbl_contentPane = new GridBagLayout();
gbl_contentPane.columnWidths = new int[] { 100, 0 };
gbl_contentPane.rowHeights = new int[] { 0, 0, 0 };
gbl_contentPane.columnWeights = new double[] { 0.0, 1.0, Double.MIN_VALUE };
gbl_contentPane.rowWeights = new double[] { 0.0, 0.0, Double.MIN_VALUE };
contentPane.setLayout(gbl_contentPane);
JTextField textField = new JTextField();
GridBagConstraints gbc = new GridBagConstraints();
gbc.insets = new Insets(0, 0, 5, 0);
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.gridx = 1;
gbc.gridy = 0;
contentPane.add(textField, gbc);
textField.setColumns(10);
JLabel totalLabel = new JLabel("Total:");
gbc.fill = GridBagConstraints.NORTHWEST;
gbc.gridx = 0;
gbc.gridy = 1;
gbc.gridwidth = 1;
gbc.gridheight = 1;
gbc.weightx = 1;
gbc.insets = new Insets(5, 1, 1, 5);
contentPane.add(totalLabel, gbc);
JButton sumButton = new JButton("Sum");
gbc = new GridBagConstraints();
gbc.insets = new Insets(4, 4, 4, 8);
gbc.gridx = 2;
gbc.gridy = 0;
contentPane.add(sumButton, gbc);
sumButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
numbers.add(Integer.parseInt(textField.getText()));
totalLabel.setText("Total: " + numbers.stream().mapToInt(Integer::intValue).sum());
}
});
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.pack();
this.setVisible(true);
}
}
package com.java.demo;
导入java.awt.GridBagConstraints;
导入java.awt.GridBagLayout;
导入java.awt.HeadlessException;
导入java.awt.Insets;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.util.ArrayList;
导入java.util.List;
导入javax.swing.JButton;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.JPanel;
导入javax.swing.JTextField;
导入javax.swing.border.EmptyBorder;
公共类TestFrame扩展了JFrame{
列表编号=新的ArrayList();
公共静态void main(字符串[]args){
新的TestFrame();
}
private TestFrame()抛出HeadlessException{
超级();
此.setLocationByPlatform(true);
JPanel contentPane=新的JPanel();
setboorder(新的EmptyBorder(5,5,5,5));
setContentPane(contentPane);
GridBagLayout gbl_contentPane=新的GridBagLayout();
gbl_contentPane.columnWidths=newint[]{100,0};
gbl_contentPane.rowHeights=newint[]{0,0,0};
gbl_contentPane.columnWeights=新的double[]{0.0,1.0,double.MIN_VALUE};
gbl_contentPane.rowWeights=newdouble[]{0.0,0.0,double.MIN_VALUE};
setLayout(gbl_contentPane);
JTextField textField=新的JTextField();
GridBagConstraints gbc=新的GridBagConstraints();
gbc.插图=新插图(0,0,5,0);
gbc.fill=GridBagConstraints.HORIZONTAL;
gbc.gridx=1;
gbc.gridy=0;
contentPane.add(textField,gbc);
textField.setColumns(10);
JLabel totalabel=新JLabel(“总计:”);
gbc.fill=GridBagConstraints.NORTHWEST;
gbc.gridx=0;
gbc.gridy=1;
gbc.gridwidth=1;
gbc.gridheight=1;
gbc.weightx=1;
gbc.插图=新插图(5,1,1,5);
contentPane.add(totalabel,gbc);
JButton sumButton=新JButton(“总和”);
gbc=新的GridBagConstraints();
gbc.插图=新插图(4,4,4,8);
gbc.gridx=2;
gbc.gridy=0;
contentPane.add(sumButton,gbc);
sumButton.addActionListener(新ActionListener(){
@凌驾
已执行的公共无效操作(操作事件e){
add(Integer.parseInt(textField.getText());
totalabel.setText(“Total:+numbers.stream().mapToInt(Integer::intValue.sum());
}
});
此.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
这个包();
此.setVisible(true);
}
}
希望这有帮助。祝您编码愉快。您想在文本框中输入数字的总和吗?我想填写ArrayList te_ardhurat=new ArrayList(Arrays.asList()),方法是在JText字段a中输入一个值,然后按我创建的按钮