btok.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {

now-=Integer.parseInt(tf.getText());


}
解释btok是一个按钮控件,tf是一个文本输入控件,now是类的成员变量int类型,但
触发按钮后,在我重载的Paint函数中,要用到这个变量,
public void paint(Graphics g){
   System.out.println(now);
}
但始终是0.
不解中
请各位高手帮忙解答下

解决方案 »

  1.   

    把ActionListener 写成内部类,就能直接访问或修改外部类的成员变量啦
      

  2.   

    触发事件后要调用repaint或其它能引起重绘的函数使组件重绘
      

  3.   


    public void paint(Graphics g){ 
      System.out.println(now); 
    } 这句执行是在按钮触发之前执行,还是之后?
      

  4.   

    package com.zuoye.assign;import java.awt.Color;
    import java.awt.Container;
    import java.awt.FlowLayout;
    import java.awt.Frame;
    import java.awt.Graphics;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JTextField;public class Assign extends JFrame{
    private JLabel lb1;
    private JLabel lb2;
    private JTextField tf1;
    private JTextField tf2;
    private JButton btok1;
    private JButton btok2;

    int now=0;




    public void launchFrame() {


    lb1=new JLabel("分配:");
    Container c=this.getContentPane();
    c.setLayout(new FlowLayout());
    c.add(lb1);
    tf1=new JTextField(2);
    c.add(tf1);
    btok1=new JButton("ok");
    c.add(btok1);
    btok1.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {

    now+=Integer.parseInt(tf1.getText());


    }
    });

    lb2=new JLabel("释放:");
    c.add(lb2);
    tf2=new JTextField(2);
    c.add(tf2);
    btok2=new JButton("ok");
    c.add(btok2);
    btok2.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {

    now-=Integer.parseInt(tf2.getText());


    }
    }
    );

    this.setBounds(0, 0, 300, 350);
    this.setVisible(true);
    this.setResizable(false);
    this.addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent e) {
    System.exit(0);
    }
    });

    } public static void main(String[] args) {
    // TODO Auto-generated method stub
    Assign a=new Assign();
    a.launchFrame();
    }
    public void paint(Graphics g) {

    super.paint(g);
    g.setColor(Color.black);
    int k=0;


    for(int j=0;j<9;j++)
    for(int i=0;i<9;i++)
    {
    k++;
    if(k<=now)
    g.fill3DRect(15+30*i, 70+j*30, 30, 30,true);
    else
    g.draw3DRect(15+30*i, 70+j*30, 30, 30,true);
    }
    }}
      

  5.   

    在监听器中加个repaint();就可以了。。
      

  6.   

    同意楼上,repaint() 自动调用update(), update()再调用paint()函数
      

  7.   


    import java.awt.Color; 
    import java.awt.Container; 
    import java.awt.FlowLayout; 
    import java.awt.Frame; 
    import java.awt.Graphics; 
    import java.awt.event.ActionEvent; 
    import java.awt.event.ActionListener; 
    import java.awt.event.WindowAdapter; 
    import java.awt.event.WindowEvent; import javax.swing.JButton; 
    import javax.swing.JFrame; 
    import javax.swing.JLabel; 
    import javax.swing.JTextField; public class Assign extends JFrame{ 
    private JLabel lb1; 
    private JLabel lb2; 
    private JTextField tf1; 
    private JTextField tf2; 
    private JButton btok1; 
    private JButton btok2; int now=0; 
    public void launchFrame() { 
    lb1=new JLabel("分配:"); 
    Container c=this.getContentPane(); 
    c.setLayout(new FlowLayout()); 
    c.add(lb1); 
    tf1=new JTextField(2); 
    c.add(tf1); 
    btok1=new JButton("ok"); 
    c.add(btok1); 
    btok1.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent e) { now+=Integer.parseInt(tf1.getText()); 
    System.out.println(now);
    repaint();

    }); lb2=new JLabel("释放:"); 
    c.add(lb2); 
    tf2=new JTextField(2); 
    c.add(tf2); 
    btok2=new JButton("ok"); 
    c.add(btok2); 
    btok2.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent e) { now-=Integer.parseInt(tf2.getText()); 
    repaint();} 

    ); this.setBounds(0, 0, 300, 350); 
    this.setVisible(true); 
    this.setResizable(false); 
    this.addWindowListener(new WindowAdapter() { 
    public void windowClosing(WindowEvent e) { 
    System.exit(0); 

    }); } public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    Assign a=new Assign(); 
    a.launchFrame(); 

    public void paint(Graphics g) { 
    System.out.println("sdf" + now);
    super.paint(g); 
    g.setColor(Color.black); 
    int k=0; 
    for(int j=0;j <9;j++) 
    for(int i=0;i <9;i++) 

    k++; 
    if(k <=now) 
    g.fill3DRect(15+30*i, 70+j*30, 30, 30,true); 
    else 
    g.draw3DRect(15+30*i, 70+j*30, 30, 30,true); 

    } }