免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3120 | 回复: 7
打印 上一主题 下一主题

郁闷的add(component)问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-07-09 15:36 |只看该作者 |倒序浏览
我的原代码如下:
import java.awt.*;
import javax.swing.*;
public class MyPanelTest
{
        public static void main(String[] args)
        {
                MyPanel frame=new MyPanel();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setVisible(true);
        }        
}
class MyPanel extends JFrame
{
        public MyPanel()
        {
                setTitle("NotHelloWorld");
                setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);
                MyPanelClass panel=new MyPanelClass();
                add(panel);
        }
        public static final int DEFAULT_WIDTH=300;
        public static final int DEFAULT_HEIGHT=200;
}
class MyPanelClass extends JPanel
{
        public void paintComponent(Graphics g)
        {
                super.paintComponent(g);
                g.drawString("Not a Hello,World Program",MESSAGE_X,MESSAGE_Y);
        }
        int MESSAGE_X=75;
        int MESSAGE_Y=100;
}
编译通过了,可是执行的时候出现了下面的信息.我把所有的信息贴出来了.方便你们更好的分析.
我把红色部分前面加上this.结果和下面的信息是完全相同的.

D:\project>java -version
java version "1.4.1"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.1-b21)
Java HotSpot(TM) Client VM (build 1.4.1-b21, mixed mode)

D:\project>javac MyPanelTest.java

D:\project>java MyPanelTest
Exception in thread "main" java.lang.Error: Do not use MyPanel.add() use MyPanel
.getContentPane().add() instead
        at javax.swing.JFrame.createRootPaneException(Unknown Source)
        at javax.swing.JFrame.addImpl(Unknown Source)
        at java.awt.Container.add(Unknown Source)
        at MyPanel.<init>(MyPanelTest.java:19)
        at MyPanelTest.main(MyPanelTest.java:7)

D:\project>

继续我把中间的类MyPanel做过修改后如下:
class MyPanel extends JFrame
{
public MyPanel()
{
  Container cP=MyPanel.getContentPane();
  setTitle("NotHelloWorld");
  setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);
  MyPanelClass panel=new MyPanelClass();
  cP.add(panel);
}
public static final int DEFAULT_WIDTH=300;
public static final int DEFAULT_HEIGHT=200;
}
还是出现了下面的错误:
D:\project>javac MyPanelTest.java
MyPanelTest.java:16: non-static method getContentPane() cannot be referenced fro
m a static context
                Container cP=MyPanel.getContentPane();
                                    ^
1 error
D:\project>
我没有其他的办法了.请求大家的帮助.

论坛徽章:
0
2 [报告]
发表于 2008-07-09 17:06 |只看该作者
怎么没有人理睬呢?

论坛徽章:
0
3 [报告]
发表于 2008-07-09 18:40 |只看该作者
我用jdk1.6,没什么问题啊。

论坛徽章:
0
4 [报告]
发表于 2008-07-10 01:07 |只看该作者
这个很简单,将
add(panel)
改成
getContentPane().add(panel);


不用谢我,谢我就给我汇点钱实在

[ 本帖最后由 kfdcw 于 2008-7-10 01:08 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2008-07-10 08:18 |只看该作者
4楼的,你太实在了,不过你还没有看完.我下面做过getContentPane的动作.所以问题没有解决.还是要谢谢你,不过没有钱.

论坛徽章:
0
6 [报告]
发表于 2008-07-10 10:57 |只看该作者
MyPanelTest.java:16: non-static method getContentPane() cannot be referenced fro
m a static context
!!!!!!!!!!!!!!!
public MyPanel()
{
  Container cP=MyPanel.getContentPane(); //MyPanel是你的JFrame类吧?没对象就调用成员方法?
  setTitle("NotHelloWorld");
  setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);
  MyPanelClass panel=new MyPanelClass();
  cP.add(panel);
}

Container cP = this.getContentPane(); //改成这样解决问题
...
...
...

就不用汇钱了,给点分吧,再好好学学最基础的东西

论坛徽章:
0
7 [报告]
发表于 2008-07-10 10:58 |只看该作者
原帖由 nec-tokin 于 2008-7-10 08:18 发表
4楼的,你太实在了,不过你还没有看完.我下面做过getContentPane的动作.所以问题没有解决.还是要谢谢你,不过没有钱.


就是按照4楼的方式修改。
错误中也说了MyPanel.getContantPane()是引用MyPanel的静态方法,是错的
可以用this.getContantPane()

论坛徽章:
0
8 [报告]
发表于 2008-07-10 11:34 |只看该作者
6,7楼的感谢你们的提醒,我明白了,this和MyPanel的区别了.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP