急!!java布局问题,总是提示wrong parent for CardLayout,刚学java,菜鸟一枚,求教!!!!!

shendu10 2014-05-20 04:45:18
问题:
点击【视频预览】--【一画面】,弹出Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: wrong parent for CardLayout

我用的是myeclips

请注意 class JPanel2 extends JPanel这一块代码:

我的JP2_1、JP2_2装进JP2_Display里面去了啊,JP2_Display定义为CardLayout .

我查到 CardLayout.show()。第一个参数应该是 card 的 container
JP2_Display, 而不应该是 card 自身。但是依然不会改?求指教!

源代码如下:

import..........

public class Mulit_Panel extends JFrame
{
private JPanel pane = null; // 主要的JPanel,该JPanel的布局管理将被设置成CardLayout

private JPanel p= null; // 放按钮的JPanel
private CardLayout card= null; // CardLayout布局管理器

private JButton jb1_TDao= null, jb2_view = null, jb3_video = null; // 三个可直接翻转到JPanel组件的按钮
private JPanel p_1 = null, p_2 = null, p_3 = null; // 要切换的三个JPanel


public Mulit_Panel()
{

super("透雾服务器");

try
{
// 将LookAndFeel设置成Windows样式
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
} catch (Exception ex)
{
ex.printStackTrace();
}
pane = new JPanel()
{

//设置背景图
protected void paintComponent(Graphics g)
{
super.paintComponent(g);
// ImageIcon img = new ImageIcon(ImgJframeTest.class.getResource("\\img\\2.jpg"));
ImageIcon img = new ImageIcon("E:/Users/Administrator/Workspaces/MyEclipse 8.5/lesson9/images/5.jpg");
img.paintIcon(this, g, 0, 0);
}
};
/** 创建一个具有指定的水平和垂直间隙的新卡片布局 */
card = new CardLayout(5, 5);
pane.setLayout(card);// JPanel的布局管理将被设置成CardLayout

p = new JPanel(); // 构造放按钮的JPanel
//设置按钮
jb1_TDao = new JButton("通道配置");
jb2_view = new JButton("视频预览");
jb3_video = new JButton("录像配置");
jb1_TDao.setMargin(new Insets(2, 2, 2, 2));
jb2_view.setMargin(new Insets(2, 2, 2, 2));
jb3_video.setMargin(new Insets(2, 2, 2, 2));
//在p这个panel上放置按钮
p.add(jb1_TDao);
p.add(jb2_view);
p.add(jb3_video);

p_1 = new JPanel1();

p_2 = new JPanel2();
p_3 = new JPanel3();

pane.add(p_1, "p1");//添加panel并指定名字
pane.add(p_2, "p2");
pane.add(p_3, "p3");
/** 下面是翻转到卡片布局的某个组件,可参考API中的文档 */

jb1_TDao.addActionListener(new ActionListener()
{ // 直接翻转到p_1
public void actionPerformed(ActionEvent e)
{
card.show(pane, "p1");
}
});
jb2_view.addActionListener(new ActionListener()
{ // 直接翻转到p_2
public void actionPerformed(ActionEvent e)
{
card.show(pane, "p2");
}
});
jb3_video.addActionListener(new ActionListener()
{ // 直接翻转到p_3
public void actionPerformed(ActionEvent e)
{
card.show(pane, "p3");
}
});
this.getContentPane().add(pane);
this.getContentPane().add(p, BorderLayout.NORTH);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(300, 200);
this.setVisible(true);
}

class JPanel1 extends JPanel
{

public JPanel1()
{
//添加jTable,放在JScrollPane

this.setLayout(new BorderLayout());

JPanel1_1 JP1_1=new JPanel1_1();
JPanel1_2 JP1_2=new JPanel1_2();
JPanel1_3 JP1_3=new JPanel1_3();

this.add(JP1_1,BorderLayout.NORTH);
this.add(JP1_2,BorderLayout.CENTER);
this.add(JP1_3,BorderLayout.SOUTH);
}
}
class JPanel1_1 extends JPanel
{
private String[] columnNames={ "通道号", "端口号", "启用" };
private Object[][] data={ { "通道1", 6602, "是" }, { null, null, null },
{ null, null, null } };

public JPanel1_1()
{
JScrollPane jScrollPane1 = new JScrollPane();
JTable jtable1=new JTable(data,columnNames);
jScrollPane1.setViewportView(jtable1);

this.add(jScrollPane1);
}
}

class JPanel1_2 extends JPanel
{

public JPanel1_2()
{
//添加JLabel、JTextField

JLabel jl1_TDao=new JLabel("通道号");
JTextField jt1_TDao=new JTextField(10);

JLabel jl2_Port=new JLabel("端口号");
JTextField jt2_Port=new JTextField(10);

JLabel jl2_QUse=new JLabel("启用");

JRadioButton r1_yes=new JRadioButton("是");
JRadioButton r2_no=new JRadioButton("否");
ButtonGroup group=new ButtonGroup();
group.add(r1_yes);
group.add(r2_no);
JButton jbt1_add=new JButton("添加");
JButton jbt2_delete=new JButton("删除");

this.add(jl1_TDao);
this.add(jt1_TDao);
this.add(jl2_Port);
this.add(jt2_Port);
this.add(jl2_QUse);
this.add(r1_yes);
this.add(r2_no);
this.add(jbt1_add);
this.add(jbt2_delete);
}
}
class JPanel1_3 extends JPanel
{

public JPanel1_3()
{

JButton jbt3_refresh=new JButton("更新");
JButton jbt4_cancel=new JButton("取消");

//添加按钮

this.add(jbt3_refresh);
this.add(jbt4_cancel);

}
}



class JPanel2 extends JPanel
{
JPanel JP2_Display=new JPanel();
JPanel JP2_Button=new JPanel();

public JPanel2()
{
//this.setLayout(new BorderLayout());
add(JP2_Button,BorderLayout.NORTH);
add(JP2_Display,BorderLayout.CENTER);


//创建一个新的卡片布局
CardLayout card1=new CardLayout();
JP2_Display.setLayout(card1);

//JP2_Button放置按钮的panel
JButton button_1 = new JButton("一画面");
JButton button_2 = new JButton("四画面");

button_1.setMargin(new Insets(2, 2, 2, 2));
button_2.setMargin(new Insets(2, 2, 2, 2));

JP2_Button.add(button_1);
JP2_Button.add(button_2);

//JP2_1,JP2_2为切换的panel
//JTable jtable2=new JTable(1,1);
//JTable jtable3=new JTable(2,2);
JLabel jlabel1=new JLabel("一画面");
JLabel jlabel2=new JLabel("四画面");
JPanel JP2_1 =new JPanel();
JPanel JP2_2=new JPanel();
//JP2_1.add(jtable2);
//JP2_2.add(jtable3);
JP2_1.add(jlabel1);
JP2_2.add(jlabel2);
JP2_Display.add(JP2_1,"one");
JP2_Display.add(JP2_2,"four");

button_1.addActionListener(new ActionListener()
{ // 直接翻转到JP2_1
public void actionPerformed(ActionEvent e)
{
card.show(JP2_Display, "one");
}
});
button_2.addActionListener(new ActionListener()
{ // 直接翻转到JP2_2
public void actionPerformed(ActionEvent e)
{
card.show(JP2_Display,"four");
}
});

}
}

class JPanel3 extends JPanel
{
public JPanel3()
{
this.add(new JLabel("录像配置"));


}
}

public static void main(String[] args)
{
new Mulit_Panel();
}

}
...全文
373 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
shendu10 2014-05-20
  • 打赏
  • 举报
回复
已经搞定!!!

81,115

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧