我在MainFrame中利用卡片布局切换需要显示的JPanel也就是后面的ManageBuilding这个类
在ManageBuilding里面我需要新建很多button但是每次切换到相应的ManageBuilding对应的卡片时
就只有将固定的那些Button没有循环创建的那些,鼠标划过的时候就又能看见这些button了
而且再次切换到这张卡片又是一片白板又得用鼠标划过才能显示...
急求解决方案啊...public class MainFrame extends JFrame{

ManageBuilding jp2 = new ManageBuilding("A", 13, 10);
JPanel jp1 = new JPanel();
JMenuBar mb = new JMenuBar();
CardLayout cl = null;

MainFrame(){
this.setResizable(false);

cl = new CardLayout();
final Container c = getContentPane();
c.setLayout(cl);
c.add(jp2, "2");

setJMenuBar(mb);
JMenu jm = new JMenu("选择操作");
mb.add(jm); JMenuItem jmi2 = new JMenuItem("管理楼栋信息");
jmi2.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
cl.show(c, "2");
}
});
jm.add(jmi2);

}

private void _setVisible(boolean b){
this.setVisible(b);
}
public static void main(String[] args) {
MainFrame mf =new MainFrame();
mf.setTitle("小区物业管理系统");
mf.setSize(800, 600);
mf.setDefaultCloseOperation(EXIT_ON_CLOSE);

}
}
------------------------------------------------------------------------------------------
public class ManageBuilding extends JPanel{

public ManageBuilding(String bid, int f, int num) {
initComponents(bid, f, num);
}

private void initComponents(String bid, int f, int num) {

for(int i = 0; i < num; i++ ){
String floor = "";
for(int j = 0; j < f; j++){
if(j < 9){
floor ="0"+(j+1);
}else{
floor =""+(j+1);
}
String name = bid +floor+0+(i+1);
jbs[i*num + j] = new JButton(name);
add(jbs[i*num + j]);
jbs[i*num + j].setBounds(i*70, 500-j*23, 70, 23);
}
jbs[i*num + f] = new JButton("style");
add(jbs[i*num + f]);
jbs[i*num + f].setBounds(i*70, 500-(f+1)*23, 70, 23);
}
}
private JButton[] jbs = new JButton[500];
private JButton jb = new JButton();
}

解决方案 »

  1.   

    补充一下,如果只是对JFrame里面添加 那些button是没有问题的都能显示,问题就在 向一个用CardLayout布局的JFrame里面添加一个 有很多BUTTON的JPanel就出问题了!!
    急求高人解决啊!!
      

  2.   

    运行你上面所贴的代码,没有看到你所说的效果。所以,只能根据你所说的效果推断原因:在执行动作之后,没有刷新所致。因此,在执行动作之后,加上revalidate(),repaint(),应该可以了。比如:
    在actionPerformed(ActionEvent e) {
         .....//具体的业务逻辑     MainFrame.validate();//如果是JComponent,最好使用revalidate()代替validate();
         MainFrame.repaint();
    }
      

  3.   

    谢谢了,我把问题解决了,我的程序里多了一个JPanel是MYeclipse自动生成的,后来找到删除了就OK了
    不过还是感谢你,确实要用validate();