动态更改JTextField?

时间:2015-01-23 19:37:19

标签: java jtextfield

我的目的是让用户单击10个按钮,并在不可编辑的JTextField中显示总和。我在控制台做了一点测试,表明它正在计算正确,我的成功是:控制台在点击它们时加起来了。 (http://i.imgur.com/Cwyjm0h.jpg

我知道你不能在JTextField中输入一个int值,所以我尝试使用String.valueOf();转换它并正确输出它。控制台一直在说它为0。也许它需要在其他地方重新焕发活力?我说不出来。当我点击按钮时,我也不相信它会改变。我认为这不是它的工作方式,但我不知道我会在这里做什么。

所以我的问题是:

1)在将总数转换为sTotal时我做错了什么

2)如果即使有一个行动事件,这个数字也不会改变,我还有什么选择?

提前谢谢,这是来源!

编辑:我通过添加

修复了字符串转换的问题
String sTotal = String.valueOf(total);
    System.out.println(sTotal);

位于system.out.println。(total);

下的底部
import java.awt.FlowLayout;
import java.awt.event.ActionListener;  
import java.awt.event.ActionEvent;
import javax.swing.JFrame; 
import javax.swing.JButton;
import javax.swing.JTextField;

//JFrame builds the window
public class ThreeOne extends JFrame{

int total;
String sTotal = String.valueOf(total);

private JTextField question;
private JButton Button1, Button2, Button3, Button4, Button5, 
Button6, Button7, Button8, Button9, Button10;



//The window
public ThreeOne(){
    super("");
    setLayout(new FlowLayout());

    question = new JTextField(sTotal, 40);

    question.setEditable(false);
    add(question);

    Button1 = new JButton("1");
    add(Button1);
    Button2 = new JButton("2");
    add(Button2);
    Button3 = new JButton("3");
    add(Button3);
    Button4 = new JButton("4");
    add(Button4);
    Button5 = new JButton("5");
    add(Button5);
    Button6 = new JButton("6");
    add(Button6);
    Button7 = new JButton("7");
    add(Button7);
    Button8 = new JButton("8");
    add(Button8);
    Button9 = new JButton("9");
    add(Button9);
    Button10 = new JButton("10");
    add(Button10);





    thehandler handler = new thehandler();
    Button1.addActionListener(handler);
    Button2.addActionListener(handler);
    Button3.addActionListener(handler);
    Button4.addActionListener(handler);
    Button5.addActionListener(handler);
    Button6.addActionListener(handler);
    Button7.addActionListener(handler);
    Button8.addActionListener(handler);
    Button9.addActionListener(handler);
    Button10.addActionListener(handler);


}

//implements means this is the class that handles the events
private class thehandler implements ActionListener{

    public void actionPerformed(ActionEvent event){



        // event is like an enter or a click
        if(event.getSource()== Button1)
        total = total + 1;
        if(event.getSource()== Button2)
            total = total + 2;

        if(event.getSource()== Button3)
            total = total + 3;

        if(event.getSource()== Button4)
            total = total + 4;

        if(event.getSource()== Button5)
            total = total + 5;

        if(event.getSource()== Button6)
            total = total + 6;

        if(event.getSource()== Button7)
            total = total + 7;

        if(event.getSource()== Button8)
            total = total + 8;

        if(event.getSource()== Button9)
            total = total + 9;

        if(event.getSource()== Button10)
            total = total + 10;



    System.out.println(total);




    }

}
      }

1 个答案:

答案 0 :(得分:1)

您需要在Actionlistener中更新它。

System.out.println

之前
public void actionPerformed(ActionEvent event){

    ....
    question.setText(Integer.toString(total)); //can use "" + total, just need to be a String
    System.out.println(total); //you can use this for sanity checking
}

sTotal没有做任何事情,因为它是在实例化时创建的,值为0.

您传递了String"值"对应用程序,而不是对它的引用。 sTotal将保持" 0"直到你更新它,并且除了在实例化之外没有证据表明它被更新。即使更新了sTotal,组件也不会更新,因为传递了String值而不是对值的引用。