永发信息网

问一个java问题,下面代码为什么会报java.lang.IllegalArgumentException 这种异常哪 希望大神详细解答

答案:4  悬赏:80  手机版
解决时间 2021-03-16 16:25
问一个java问题,下面代码为什么会报java.lang.IllegalArgumentException 这种异常哪 希望大神详细解答
最佳答案
java 参数 异常 ,错误 在 this.setContentPane(new DrawPanel()); ,因为 你的 DrawPanel是一个 frame ,而 frame 是不能 放在 frame里面的,你可以 修改成 panel
全部回答
错误是参数不合法、具体错在哪一行?
这个异常是说参数不合法,如果能把异常信息全部贴出来就好找地方了,但是目测initialize方法中this.setContentPane(new DrawPanel())这里的问题,DrawPanel继承的是JFrame,在主体窗口DrawCircle里再添加一个窗口类,不但显示不出来,而且两个JFrame因为setContentPane方法产生了冲突,最直接的修改就是把private class DrawPanel extends JFrame改成private class DrawPanel extends JPanel,因为JPanel是面板,可以正常装载到JFrame里
Exception in thread "main" java.lang.IllegalArgumentException: adding a window to a container
at java.awt.Container.checkNotAWindow(Container.java:431)
at java.awt.Container.addImpl(Container.java:1039)
at javax.swing.JLayeredPane.addImpl(JLayeredPane.java:212)
at java.awt.Container.add(Container.java:927)
at javax.swing.JRootPane.setContentPane(JRootPane.java:608)
at javax.swing.JFrame.setContentPane(JFrame.java:671)
at DrawCircle.initialize(DrawCircle.java:18)
at DrawCircle.(DrawCircle.java:11)
at DrawCircle.main(DrawCircle.java:24)
你为什么会设置contentPane为一个JFrame呢?
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class DrawCircle extends JFrame {
private final int OVAL_WIDTH = 80;
private final int OVAL_HEIGHT = 80;
public DrawCircle() {
super();
initialize();
}
private void initialize() {
this.setSize(300, 200);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setContentPane(new DrawPanel());
this.setTitle("奥运五环");
// this.setVisible(true);
}
public static void main(String[] args) {
new DrawCircle().setVisible(true);
}
private class DrawPanel extends JPanel {
public void paint(Graphics g) {
super.paint(g);
g.drawOval(10, 10, OVAL_WIDTH, OVAL_HEIGHT);
g.drawOval(80, 10, OVAL_WIDTH, OVAL_HEIGHT);
g.drawOval(150, 10, OVAL_WIDTH, OVAL_HEIGHT);
g.drawOval(50, 70, OVAL_WIDTH, OVAL_HEIGHT);
g.drawOval(120, 70, OVAL_WIDTH, OVAL_HEIGHT);
}
}
}
关于setContentPane()和getContentPane()的应用
------摘要:java_流子 Fab.19 2006-------- 
我们可以在 JFrame 对象中添加 AWT 或者 Swing 组件。但是,虽然它有 add 方法,却不能直接用于添加组件,否则会抛出异常——不信就试试。造成这个现象的原因只有一个解释:JFrame 不是一个容器,它只是一个框架。那么,应该怎么添加组件呢?
  JFrame 有一个 Content Pane,窗口能显示的所有组件都是添加在这个 Content Pane 中。JFrame 提供了两个方法:getContentPane 和 setContentPane 就是用于获取和设置其 Content Pane 的。
  对JFrame添加组件有两种方式:
  1)用getContentPane()方法获得JFrame的内容面板,再对其加入组件:frame.getContentPane().add(childComponent)
  2)建立一个Jpanel或JDesktopPane之类的中间容器,把组件添加到容器中,用setContentPane()方法把该容器置为JFrame的内容面板:
    JpanelcontentPane=newJpanel();
    ……//把其它组件添加到Jpanel中;
    frame.setContentPane(contentPane);
    //把contentPane对象设置成为frame的内容面板
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
支付宝可以邦微信吗
虾得乐怎么去啊,有知道地址的么
全民突击合作模式伤害百分之十跟暴击百分之十
你用嘴zuo一口的zuo字怎么写
手脚一到冬季就起刺怎么办?
🐉 求 答 案 ( )什么海没有水? (
盛世花园南三门(人行门)在什么地方啊,我要过
怎么去温哥华市中心 Residence Inn 酒店
渣男和渣女在一起后,能长久吗
在公司上班受了工伤 合同到期公司不续签 离职
你好,请问你是山师的研究生吗?能不能告诉我
英雄联盟的这个装备是不是加0.25AD,触发被动
怎样烧出刀刃上的波浪纹
ai封套有什么用
智多星幼儿园地址在哪,我要去那里办事
推荐资讯
酱牛肉怎样做口感不老?
青云图文在哪里啊,我有事要去这个地方
英国Cheeky Chompers纱棉咬咬兜怎么样?
谁可以告诉我保护模式怎么解吗??点击解除保
有qq币的qq号会被腾讯收回吗
宝丽嘉陶瓷卫浴在什么地方啊,我要过去处理事
煌昇制伞厂地址有知道的么?有点事想过去
在北京做朝鲜族的饭店能赚钱吗
量刑建议的方式有哪些
檀香园物业的电话号码是多少
三门滩大桥在什么地方啊,我要过去处理事情
想知道: 南阳市 南阳城市金矿 在哪
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?