package demo.lwj;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
public class e2_1 {
public static class pandel extends JPanel{
public pandel(){
System.out.println("创建pandel");
}
public void paint(Graphics g)
{
System.out.println("进入pandel的paint方法");
g.setColor(Color.RED);
g.drawLine(50,100,101,401);;
System.out.println("完成pandel的paint方法");
}
}
public static void main(String[] args) {
final JFrame myFrame=new JFrame();
myFrame.setSize(800,600);
myFrame.setLocationRelativeTo(null); //设置窗口的位置屏幕中间
myFrame.setResizable(false); //设置为不可改变大小
myFrame.setVisible(true);
myFrame.setDefaultCloseOperation(myFrame.EXIT_ON_CLOSE); //设置关闭事
JPanel pan=new JPanel();
pan.setPreferredSize(new Dimension(200, 600));
JButton but=new JButton("添加面板");
pan.add(but);
myFrame.add(pan,BorderLayout.EAST);
final pandel pl=new pandel();
but.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("开始执行事件");
myFrame.add(pl,BorderLayout.CENTER);
System.out.println("事件执行完毕");
}
});
// myFrame.add(pl,BorderLayout.CENTER);
}
}
上述代码是想在点击按钮时将一个面板添加到myFrame中,该面板会绘制一条红线。可是发现在actionPerformed方法中的添加面板方法无法完成添加任务。
但是在main方法中却可以完成正常的添加,也就是将代码下面注释的那行去掉注释就可以完成添加了。这是为什么呢?请高手指教!
------解决思路----------------------
在你的监听方法内
myFrame.add(pl,BorderLayout.CENTER);//之后添加下面一句,记得要刷新面板哦
myFrame.validate();