当前位置: 代码迷 >> Java相关 >> swing:为什么一个类里调用另一个类的panel不显示解决办法
  详细解决方案

swing:为什么一个类里调用另一个类的panel不显示解决办法

热度:6377   发布时间:2013-02-25 21:50:29
swing:为什么一个类里调用另一个类的panel不显示
//这是index类,要在这个类里调用另外一个类的panel
public class IndexFrame extends JFrame {

private static final long serialVersionUID = 1L;

protected ImagePanel backgroundPanel;
protected NavigationPanel navigationPanel;

public IndexFrame() {
init();
}

private void init() {
JFrame frame = new JFrame();
backgroundPanel = new ImagePanel(new ImageIcon(
"images/backgroundImg.png").getImage());
backgroundPanel.setOpaque(false);
navigationPanel = new NavigationPanel();
backgroundPanel.add(navigationPanel);
frame.getContentPane().add(backgroundPanel);
frame.pack();
frame.setVisible(true);
frame.setLocation(200, 80);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new IndexFrame();
}

}



//这是被调用的类,此类里构造一个panel
public class NavigationPanel extends JPanel {
protected static ImagePanel navigationPanel;
protected JPanel navButtonPanel;

public NavigationPanel() {
init();
}

private void init() {
navigationPanel = new ImagePanel(new ImageIcon(
"images/navigationBgr2.png").getImage());
navigationPanel.setOpaque(false);
navigationPanel.setOpaque(false);
navigationPanel.setVisible(true);
System.out.println("navigationPanel 初始化完毕");
}
public static void main(String[] args) {
new NavigationPanel();
JFrame frame = new JFrame();
frame.add(navigationPanel);
frame.setSize(600, 200);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}

这样调用,为什么不显示?
单独运行navigationPanel就能显示
请大家帮解决,谢谢!

------解决方案--------------------------------------------------------
ImagePanel代码没有贴出来,楼主将这个类代码贴出来看看
------解决方案--------------------------------------------------------
你的 NavigationPanel 类能自己执行正常显示是因为
你在这个类的mian方法中,把
protected static ImagePanel navigationPanel;
这个静态变量直接塞到了JFrame中

而你在 IndexFrame 这个类中,只是把一个 NavigationPanel 类的对象塞了进去
而不是把 NavigationPanel 类的 protected static ImagePanel navigationPanel; 这个静态成员变量塞了进去
当然显示不正常

NavigationPanel 类只是一个普普通通的 JPanel 上面什么都没有
你在 NavigationPanel 实现过程中也没有把 
protected static ImagePanel navigationPanel;
这个成员变量 add 到 NavigationPanel 上去,

总之,你这个结构写的很混乱把你的两个类小改了下,你试试吧

Java code
public class NavigationPanel extends ImagePanel {    protected JPanel navButtonPanel;    public NavigationPanel() {        super(new ImageIcon(                "images/navigationBgr2.png").getImage());        init();    }    private void init() {        setOpaque(false);    }    public static void main(String[] args) {        JFrame frame = new JFrame();        frame.add(new NavigationPanel());        frame.setSize(600, 200);        frame.setVisible(true);        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);    }}
  相关解决方案