我自己写了个监听器,目的是在一个panel 上面删除原来的加载的panel,然后再添加一个别的控件,目的是想提高重用性,
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
blank.removeAll();
                                blank.add(panel);

}//这是可以通过的,并且能达到目
于是我就写了下面一个类
class createActionListener implements ActionListener{

private JPanel _blank,pui;

public createActionListener(JPanel b,JPanel p){
_blank=b;
pui=p;
}

public void actionPerformed(ActionEvent e) {
 blank.removeAll();
 
 _blank.add(pui);
}
}
**************************
在实际调用的时候是这样写的
button.addActionListener(new ActionListener(blank,panel));
但没有任何结果,谁能告诉我为甚啊????

解决方案 »

  1.   

    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;public class Test {
    private JFrame frame = null; private JButton button = null; private JPanel pane = null; public Test() {
    frame = new JFrame("Test");
    pane = new JPanel();
    button = new JButton("更换组件");
    button.addActionListener(new CreateActionListener(pane, new JLabel("想换的新组件")));
    pane.add(new JButton("老组件"));
    frame.getContentPane().add(pane);
    frame.getContentPane().add(button, BorderLayout.NORTH);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(300, 200);
    frame.setVisible(true);
    } public static void main(String[] args) {
    new Test();
    }
    }class CreateActionListener implements ActionListener { private JPanel pane = null;

    private JLabel label = null;

    public CreateActionListener(JPanel pane, JLabel label) {
    this.pane = pane;
    this.label = label;
    } public void actionPerformed(ActionEvent e) {
    pane.removeAll();
    pane.add(label);
    pane.updateUI(); // 重点在这里
    }
    }
      

  2.   

    哦 我懂了 要刷新一下就可以了;
    谢谢;
    我后来 用了2个方法来解决这个问题的;
    先panel.setVisible(false);
    再panel.setVisible(true);现在看看好像你的方法更简便;