package map;
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
/**
* <p>Title: </p>
*
* <p>Description: </p>
*
* <p>Copyright: Copyright (c) 2006</p>
*
* <p>Company: </p>
*
* @author not attributable
* @version 1.0
*/
public class test extends JFrame {
public test() {
super("Map");
setSize(500,500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
MapPane map1=new MapPane();
Container content =(JPanel)getContentPane();
content.add(map1);
}
public static void main(String[] args) {
test Frame = new test();
Frame.show();
}
}
class MapPane extends JFrame{
public void paintComponent(Graphics comp){
Graphics comp2D =(Graphics2D)comp;
comp2D.drawString("haiwang",100,100);
}
}
编译是老出现错误(本程序是21天学通java的现成的程序):
java.lang.IllegalArgumentException: adding a window to a container
at java.awt.Container.addImpl(Container.java:616)
at java.awt.Container.add(Container.java:307)
at map.test.<init>(test.java:24)
at map.test.main(test.java:28)
Exception in thread "main"
各个大虾给说说为什么?
----------------解决方案--------------------------------------------------------
把组件加入到JFrame中啊,然后再设置大小
----------------解决方案--------------------------------------------------------
这位兄弟能否说清楚点,我要是把把getContentPane(map)改为getContentPane(new JButton())就没有错误,我觉得好像不是哪方面的问题吧
----------------解决方案--------------------------------------------------------
我没事过JFrame只见的嵌套,因为是重量级组件,我建议把class MapPane extends JFrame
改为extends JDialog 试试
----------------解决方案--------------------------------------------------------
java.lang.IllegalArgumentException: adding a window to a container
这条提示 错误的参数传递 , 添加了一个窗口给容器(adding a window to a container)
也就是这句:content.add(map1);
...
class MapPane extends JFrame
把JFrame 改成JButton 就哦棵了。
容器应该包含在窗口中, 而不是容器内包含窗口.
下面是我修改后的代码
package map;
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
/**
* <p>Title: </p>
*
* <p>Description: </p>
*
* <p>Copyright: Copyright (c) 2006</p>
*
* <p>Company: </p>
*
* @author not attributable
* @version 1.0
*/
class test extends JFrame {
public test() {
super("Map");
setSize(500,500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
MapPane map1=new MapPane();
Container content =(JPanel)getContentPane();
content.add(map1);
}
public static void main(String[] args) {
test Frame = new test();
Frame.show();
}
}
class MapPane extends JButton{ // 将JFrame 改成 JButton
public void paintComponent(Graphics comp){
Graphics comp2D =(Graphics2D)comp;
comp2D.drawString("haiwang",100,100);
}
}
/**
* 我添加的测试类,测试 test
* @version 1.0, 2006-07-27
* @author witchery
*/
class test2 {
public static void main(String[] args) {
test s = new test();
}
}
----------------解决方案--------------------------------------------------------