| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4341 人关注过本帖
标题:Swing 向jframe中添加 jpanel类的问题
只看楼主 加入收藏
Jared_self
Rank: 1
来 自:黑龙江
等 级:新手上路
帖 子:20
专家分:0
注 册:2008-8-6
收藏
 问题点数:0 回复次数:9 
Swing 向jframe中添加 jpanel类的问题
我创建了
一个jframe类 mainframe
一个jpanel 类 Book
一个控制类 add   在add类中 new一个 Book加到mainframe里
add类在mainframe的菜单监听里调用add(mainframe)参数是mainframe类型的

在mainframe中建立main方法 启动 添加 jpanel类型的Book 成功显示

但当通过登陆窗口 打开 mainframe 窗口时再调用add(mainframe)有空指针异常
请问 在 mainframe本类中new 和在登陆窗口中new  出的mainframe窗口有什么不同吗
 要怎么解决
搜索更多相关主题的帖子: Swing jframe jpanel 
2008-08-06 23:42
jdk2006
Rank: 1
等 级:新手上路
帖 子:244
专家分:0
注 册:2007-5-12
收藏
得分:0 
上传代码看看

2008-08-07 04:08
Jared_self
Rank: 1
来 自:黑龙江
等 级:新手上路
帖 子:20
专家分:0
注 册:2008-8-6
收藏
得分:0 
//已经解决 但我还是想不通  代码有点长 写的不全  希望能够得到 详细的答案 谢谢!
第一个类Main:
public class Main extends JFrame {
    final JLabel label;
    .........................//略
    static Main fm;
public Main() {
        super();
........................//略

final JMenuItem menuItem_4 = new JMenuItem();
        menuItem_4.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {// 加入 出借图书 面板
                if (RemoveAble) {
                    fm.getContentPane().removeAll();
                    fm.getContentPane().add(label, BorderLayout.NORTH);
                }
//##################当用第三个类new此类的时候 下面的语句出现空指针异常 应该是fm为空吧
                new Menu_OutBook().add(fm);//通过监听调用逻辑控制类的方法加入面板
                RemoveAble = true;//其中fm就是本类的一个实例
            }
        });
}

public static void main(String args[]) {
        try {
            fm = new Main();
            fm.setVisible(true);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void addFm(Main a){//################################此行是后加进去的
        this.fm = a;
    }
}

[[it] 本帖最后由 Jared_self 于 2008-8-7 23:12 编辑 [/it]]
2008-08-07 22:59
Jared_self
Rank: 1
来 自:黑龙江
等 级:新手上路
帖 子:20
专家分:0
注 册:2008-8-6
收藏
得分:0 
第二个类Menu_OutBook :
package Ctrl;

import java.awt.BorderLayout;
import View.OutBook;
import View.Main;

/*******************************************************************************
 * 加入-----出借图书面板
 ******************************************************************************/
public class Menu_OutBook {
    public void add(Main frame) {
        OutBook f = new OutBook();
        f.setVisible(true);
        frame.getContentPane().add(f, BorderLayout.CENTER);
        frame.validate();
    }
}
2008-08-07 22:59
Jared_self
Rank: 1
来 自:黑龙江
等 级:新手上路
帖 子:20
专家分:0
注 册:2008-8-6
收藏
得分:0 
第三个类是一个登陆敞口的监听 当验证正确后
public class FirstUser {
    public static Main frame;
.............//验证正确
frame = new Main();
//#####################################//这一行是后加进去的以解决问题
frame.addFm(frame);
//#################################
frame.setVisible(true);
uin.setVisible(false);// 隐藏登陆窗口
}

[[it] 本帖最后由 Jared_self 于 2008-8-7 23:01 编辑 [/it]]
2008-08-07 22:59
Jared_self
Rank: 1
来 自:黑龙江
等 级:新手上路
帖 子:20
专家分:0
注 册:2008-8-6
收藏
得分:0 
我是想知道,为什么Main自己new自己的时候没有问题,而通过第三个类FirstUser new的时候要调用frame.addFm(frame);方法?把自己的属性再次加到自己身上那?难道两次new出的frame不是一个吗。想不大通?
2008-08-07 23:06
jdk2006
Rank: 1
等 级:新手上路
帖 子:244
专家分:0
注 册:2007-5-12
收藏
得分:0 
奥,这样的。你对创建实例还不是很理解。new每次都会开一个新的实例。在虚拟机的存储也发生变化。
public class test {
    public test(char flag){
        System.out.println("测试对象:"+flag);
    }
    public static void main(String[] args) {
        test a=new test('a');
        System.out.println(a);
        test b=new test('b');
        System.out.println(b);
    }
}
打印出的值:
测试对象:a
test@de6ced
测试对象:b
test@c17164
你的程序一些方法名对照不齐,看不懂。

2008-08-08 03:07
Jared_self
Rank: 1
来 自:黑龙江
等 级:新手上路
帖 子:20
专家分:0
注 册:2008-8-6
收藏
得分:0 
回复 7# jdk2006 的帖子
但是我的 属性static Main fm;是累的静态的  应该是每个实例公用的啊  难道只是内存地址相同 而并不是真正的同一个fm
这么理解对吗
 
谢谢你的讲解
2008-08-08 16:33
jdk2006
Rank: 1
等 级:新手上路
帖 子:244
专家分:0
注 册:2007-5-12
收藏
得分:0 
static Main fm只能算是创建了Main 的一个对象,而不是实例。new Main()才是实例。因此fm没有实例化

2008-08-08 18:55
Jared_self
Rank: 1
来 自:黑龙江
等 级:新手上路
帖 子:20
专家分:0
注 册:2008-8-6
收藏
得分:0 
明白了 谢谢 有些东西 不做真的不懂啊 呵呵
2008-08-09 16:36
快速回复:Swing 向jframe中添加 jpanel类的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.034671 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved