单击按钮时增加一个值并使用该值更新文本字段
increment a value when a button is clicked and update a text field with that value
我被困在一项作业中,每次用户单击按钮时我都需要更新文本字段。总共有 5 个按钮,每个按钮都有自己的文本字段,单击它们时应更新。我遇到的问题是多次单击时计数器似乎没有更新文本字段。所以我第一次点击按钮时,文本字段会显示“1”,但在多次点击后它仍然如此。
private class ButtonListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
int snickers = 0;
int butterfinger = 0;
int lays = 0;
int coke = 0;
int dietCoke = 0;
int totalItems = 0;
double totalPrice = (totalItems * PRICE);
if (e.getSource() == snickersButton)
{
totalItems++;
snickers++;
quantityTextS.setText(String.valueOf(snickers)); //Display snickers value in text field
itemsSelectedText.setText(String.valueOf(totalItems)); //Display total items value in text field
if(snickers > MAX)
{
JOptionPane.showMessageDialog(null, "The maximum number of each item that can be selected is 3.",
"Invalid Order Quantity", JOptionPane.ERROR_MESSAGE);
quantityTextS.setText("3"); //Set text to 3
}
}
你所有的"counters"都是局部变量,所以每次actionPerformed
被调用时它们都会被重新初始化
您应该改为创建计数器实例字段...
private class ButtonListener implements ActionListener
{
private int snickers = 0;
private int butterfinger = 0;
private int lays = 0;
private int coke = 0;
private int dietCoke = 0;
private int totalItems = 0;
public void actionPerformed(ActionEvent e)
{
double totalPrice = (totalItems * PRICE);
if (e.getSource() == snickersButton)
{
不过,这假定您对所有按钮使用相同的 ButtonListener
实例
查看 Understanding Class Members 了解更多详情
向您的按钮添加动作侦听器
buttonName.addActionListener(this);
另外,将保存要显示的值的变量写为全局变量。不要在函数内部声明
试试这个代码:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class DrawOval implements ActionListener
{
JButton genderBtn = new JButton("gender");
JFrame frm = new JFrame();
JTextField displayTF = new JTextField(15);
int i = 0;
public DrawOval(){
displayTF.setText(""+i);
frm.setTitle("Grocery");
frm.setVisible(true);
frm.setSize(200,100);
frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frm.setResizable(true);
frm.setLayout(new FlowLayout());
frm.add(displayTF);
frm.add(genderBtn);
genderBtn.addActionListener(this);
}
@Override
public void actionPerformed(ActionEvent ae) {
if(ae.getSource() == genderBtn){
i++;
displayTF.setText(""+i);
}
}
public static void main(String args[]){
new DrawOval();
}
}
这是因为您将 snickers
和 totalItems
声明为 actionPerformed
方法的本地字段,因此每次单击时它们都会被创建并初始化为 0。考虑以下方法之一:
- 使这些字段成为 class
的静态字段
- 从当前按钮中获取
snickers
和 totalItems
,将它们解析为 int 值并根据这些值进行计算
我被困在一项作业中,每次用户单击按钮时我都需要更新文本字段。总共有 5 个按钮,每个按钮都有自己的文本字段,单击它们时应更新。我遇到的问题是多次单击时计数器似乎没有更新文本字段。所以我第一次点击按钮时,文本字段会显示“1”,但在多次点击后它仍然如此。
private class ButtonListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
int snickers = 0;
int butterfinger = 0;
int lays = 0;
int coke = 0;
int dietCoke = 0;
int totalItems = 0;
double totalPrice = (totalItems * PRICE);
if (e.getSource() == snickersButton)
{
totalItems++;
snickers++;
quantityTextS.setText(String.valueOf(snickers)); //Display snickers value in text field
itemsSelectedText.setText(String.valueOf(totalItems)); //Display total items value in text field
if(snickers > MAX)
{
JOptionPane.showMessageDialog(null, "The maximum number of each item that can be selected is 3.",
"Invalid Order Quantity", JOptionPane.ERROR_MESSAGE);
quantityTextS.setText("3"); //Set text to 3
}
}
你所有的"counters"都是局部变量,所以每次actionPerformed
被调用时它们都会被重新初始化
您应该改为创建计数器实例字段...
private class ButtonListener implements ActionListener
{
private int snickers = 0;
private int butterfinger = 0;
private int lays = 0;
private int coke = 0;
private int dietCoke = 0;
private int totalItems = 0;
public void actionPerformed(ActionEvent e)
{
double totalPrice = (totalItems * PRICE);
if (e.getSource() == snickersButton)
{
不过,这假定您对所有按钮使用相同的 ButtonListener
实例
查看 Understanding Class Members 了解更多详情
向您的按钮添加动作侦听器
buttonName.addActionListener(this);
另外,将保存要显示的值的变量写为全局变量。不要在函数内部声明
试试这个代码:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class DrawOval implements ActionListener
{
JButton genderBtn = new JButton("gender");
JFrame frm = new JFrame();
JTextField displayTF = new JTextField(15);
int i = 0;
public DrawOval(){
displayTF.setText(""+i);
frm.setTitle("Grocery");
frm.setVisible(true);
frm.setSize(200,100);
frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frm.setResizable(true);
frm.setLayout(new FlowLayout());
frm.add(displayTF);
frm.add(genderBtn);
genderBtn.addActionListener(this);
}
@Override
public void actionPerformed(ActionEvent ae) {
if(ae.getSource() == genderBtn){
i++;
displayTF.setText(""+i);
}
}
public static void main(String args[]){
new DrawOval();
}
}
这是因为您将 snickers
和 totalItems
声明为 actionPerformed
方法的本地字段,因此每次单击时它们都会被创建并初始化为 0。考虑以下方法之一:
- 使这些字段成为 class 的静态字段
- 从当前按钮中获取
snickers
和totalItems
,将它们解析为 int 值并根据这些值进行计算