当前位置: 代码迷 >> J2SE >> 这个有关问题好难啊关于JFrame中添加组件有关问题
  详细解决方案

这个有关问题好难啊关于JFrame中添加组件有关问题

热度:214   发布时间:2016-04-23 20:13:59.0
这个问题好难啊!关于JFrame中添加组件问题。
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();