Java添加panel代码,Swing 向jframe中添加 jpanel类的问题

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窗口有什么不同吗

要怎么解决----------------解决方案--------------------------------------------------------

上传代码看看

----------------解决方案--------------------------------------------------------

//已经解决 但我还是想不通  代码有点长 写的不全  希望能够得到 详细的答案 谢谢!

第一个类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]]

----------------解决方案--------------------------------------------------------

第二个类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();

}

}

----------------解决方案--------------------------------------------------------

第三个类是一个登陆敞口的监听 当验证正确后

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]]

----------------解决方案--------------------------------------------------------

我是想知道,为什么Main自己new自己的时候没有问题,而通过第三个类FirstUser new的时候要调用frame.addFm(frame);方法?把自己的属性再次加到自己身上那?难道两次new出的frame不是一个吗。想不大通?

----------------解决方案--------------------------------------------------------

奥,这样的。你对创建实例还不是很理解。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

你的程序一些方法名对照不齐,看不懂。

----------------解决方案--------------------------------------------------------

回复 7# jdk2006 的帖子

但是我的 属性static Main fm;是累的静态的  应该是每个实例公用的啊  难道只是内存地址相同 而并不是真正的同一个fm

这么理解对吗

谢谢你的讲解

----------------解决方案--------------------------------------------------------

static Main fm只能算是创建了Main 的一个对象,而不是实例。new Main()才是实例。因此fm没有实例化

----------------解决方案--------------------------------------------------------

明白了 谢谢 有些东西 不做真的不懂啊 呵呵

----------------解决方案--------------------------------------------------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值