JAVA 中的CardLayout的显示问题

以下中用了JFrame,使得card.show(frm,"c2");这句语句出错,错误描述见末尾.如果把JFrame改成Frame,程序正常.因为之前编写的代码都用了JF... 以下中用了JFrame,使得card.show(frm,"c2"); 这句语句出错,错误描述见末尾.如果把JFrame改成Frame,程序正常.因为之前编写的代码都用了JFrame,因此求修改该程序,使它能在JFrame下也能运行成功.
import java.awt.*;
import javax.swing.*;
public class CenterPanel{
static JFrame frm = new JFrame("hello-card-center");
public static void main(String args[]){
CardLayout card = new CardLayout(5,10);
frm.setLayout(card);
frm.setSize(200,150);
frm.add(new Button("Button1"),"c1");
frm.add(new Button("Button2"),"c2");
frm.add(new Button("Button3"),"c3");
card.show(frm,"c2");
frm.setVisible(true);
}
}

出错信息:
Exception in thread "main" java.lang.IllegalArgumentException: wrong parent for CardLayout
at java.awt.CardLayout.checkLayout(CardLayout.java:383)
at java.awt.CardLayout.show(CardLayout.java:505)
at htmlbrowser.CenterPanel.main(CenterPanel.java:14)
展开
 我来答
ashidark
2010-04-14 · TA获得超过341个赞
知道小有建树答主
回答量:168
采纳率:0%
帮助的人:283万
展开全部
必然不行,因为JFrame有一个默认的container,JFrame是没有同位体的。
必须得到JFrame的container,可以用.getContentPane()方法来获得,也可以用.setContentPane(Container)来设置。
修改的代码如下:
import java.awt.*;
import javax.swing.*;
public class BaiduTest{
static JFrame frm = new JFrame("hello-card-center");
public static void main(String args[]){
CardLayout card = new CardLayout(5,10);
frm.setLayout(card);
frm.setSize(200,150);
frm.add(new Button("Button1"),"c1");
frm.add(new Button("Button2"),"c2");
frm.add(new Button("Button3"),"c3");
card.show(frm.getContentPane(), "c2");//就这里改了
frm.setVisible(true);
}
}
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wangjia5462873
2010-04-14 · TA获得超过107个赞
知道答主
回答量:39
采纳率:0%
帮助的人:0
展开全部
import java.awt.CardLayout;
import javax.swing.*;
public class CenterPanel {
static JFrame frm = new JFrame("hello-card-center");

public static void main(String args[]) {
CardLayout card = new CardLayout(5, 10);
JPanel jp = new JPanel();
jp.setLayout(card);
frm.setSize(200, 150);
jp.add(new JButton("Button1"), "c1");
jp.add(new JButton("Button2"), "c2");
jp.add(new JButton("Button3"), "c3");
card.show(jp, "c2");
frm.add(jp);
frm.setVisible(true);
}
}

这是我修改后的代码,你参考一下。

1.Frame、Button是awt包里面的重量级组件而JFrame、JBtton、JPanel为swing包里面的轻量级组件。
2.重量级组件和轻量级组件不要混用,不然会出现错误。!!!!!!!
3.一般给JFrame(顶层容器)中放jpanel、JTabbedPane等,而将其他小组件(如jbutton)放在jpanel中,并给jpanel设置布局管理,如Cardlayout。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
流水年华之
2010-04-14 · 超过11用户采纳过TA的回答
知道答主
回答量:36
采纳率:0%
帮助的人:51.8万
展开全部
同意一楼的建议 必须使用.getContentPane()来得到JFrame的容器
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式