Chinaunix

标题: 郁闷的add(component)问题 [打印本页]

作者: nec-tokin    时间: 2008-07-09 15:36
标题: 郁闷的add(component)问题
我的原代码如下:
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>
我没有其他的办法了.请求大家的帮助.
作者: nec-tokin    时间: 2008-07-09 17:06
怎么没有人理睬呢?
作者: shoru    时间: 2008-07-09 18:40
我用jdk1.6,没什么问题啊。
作者: kfdcw    时间: 2008-07-10 01:07
这个很简单,将
add(panel)
改成
getContentPane().add(panel);


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

[ 本帖最后由 kfdcw 于 2008-7-10 01:08 编辑 ]
作者: nec-tokin    时间: 2008-07-10 08:18
4楼的,你太实在了,不过你还没有看完.我下面做过getContentPane的动作.所以问题没有解决.还是要谢谢你,不过没有钱.
作者: 艾斯尼勒    时间: 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(); //改成这样解决问题
...
...
...

就不用汇钱了,给点分吧,再好好学学最基础的东西
作者: liuex    时间: 2008-07-10 10:58
原帖由 nec-tokin 于 2008-7-10 08:18 发表
4楼的,你太实在了,不过你还没有看完.我下面做过getContentPane的动作.所以问题没有解决.还是要谢谢你,不过没有钱.


就是按照4楼的方式修改。
错误中也说了MyPanel.getContantPane()是引用MyPanel的静态方法,是错的
可以用this.getContantPane()
作者: nec-tokin    时间: 2008-07-10 11:34
6,7楼的感谢你们的提醒,我明白了,this和MyPanel的区别了.




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2