用的java的SWing做了一个界面,按下一个按钮的时候,按钮响应函数执行(程序行比较多),期间还需要重绘界面的某些部分指示程序的进行状况(就是更新一个JTextArea做的状态栏),但我在响应函数中调用了repaint()函数状态栏还是不能实时更新,是响应函数必须执行完(就是按钮必须弹起来)图形界面才能接着重绘吗

解决方案 »

  1.   

    不要EDT里执行耗时的任务,使用一个单独的线程。
      

  2.   

    事件的处理形式是mouseClicked而不是mousePressed的原因么?
      

  3.   

    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;public class Test {
    public static void main(String[] args) {
    JFrame frame = new JFrame();
    JButton button = new JButton("按钮");
    final JLabel label = new JLabel() {
    @Override
    public void paintComponent(Graphics g) {
    super.paintComponent(g);
    System.out.println("发生重绘");
    }
    };
    button.addMouseListener(new MouseAdapter() {
    @Override
    public void mousePressed(MouseEvent e) {
    label.setText("按钮按下");
    }

    @Override
    public void mouseReleased(MouseEvent e) {
    label.setText("");
    }
    });
    frame.add(label, BorderLayout.CENTER);
    frame.add(button, BorderLayout.SOUTH);
    frame.setSize(400, 300);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
    }
    }用代码说话是最直接的……
      

  4.   

    优先使用 button.addActionListener(anActionListernImpl);
    而不是 MouseListener
      

  5.   

    我就是用的button.addActionListener,看来可能是另外几位说的开个独立线程处理响应