首先,请看代码://import ... 略去
public class VisualPanel_user {
JFrame jf = null ;
CardLayout card = null ;
public VisualPanel_user() {
JPanel jpN = new JPanel();
JPanel jpW = new JPanel();
JPanel jpC = new JPanel();
card = new CardLayout();
JLabel user_name = new JLabel("hello,"+Login_Cla.user_name);
JLabel title = new JLabel(" 欢迎进入系统 ");
user_name.setFont(new java.awt.Font("华文行楷", 0, 30));
title.setFont(new java.awt.Font("华文行楷", 0, 30));
jpN.add(user_name);
jpN.add(Box.createHorizontalStrut(100),"CENTER");
jpN.add(title,"CENTER");
jpN.add(Box.createHorizontalStrut(100),"CENTER");
jpN.setBorder(new Border(){
public Insets getBorderInsets(Component c) {
return new Insets(10,10,10,10);
}
public boolean isBorderOpaque() {
return false;
}
public void paintBorder(Component c, Graphics g, int x, int y,
int width, int height) {
}});
JScrollPane scroll=new JScrollPane();
final JTree tree = new JTree();
DefaultMutableTreeNode root = new DefaultMutableTreeNode();
DefaultMutableTreeNode buy = new DefaultMutableTreeNode();
DefaultMutableTreeNode deposit = new DefaultMutableTreeNode();
DefaultMutableTreeNode money = new DefaultMutableTreeNode();
DefaultMutableTreeNode transfer = new DefaultMutableTreeNode();
DefaultMutableTreeNode withdraw = new DefaultMutableTreeNode();
root.setUserObject("管理菜单");
buy.setUserObject("购买商品");
deposit.setUserObject("即时存款");
money.setUserObject("资金查询");
transfer.setUserObject("即时转账");
withdraw.setUserObject("即时取款");
root.add(buy);
root.add(deposit);
root.add(money);
root.add(transfer);
root.add(withdraw);
DefaultTreeModel dtm = new DefaultTreeModel(root);
tree.setModel(dtm);
scroll.setViewportView(tree);
jpW.add(scroll);// final JPanel p_1 = new UserBuy_Cla();
// final JPanel p_2 = new UserDeposit_Cla();
// final JPanel p_3 = new UserMoney_Cla();
// final JPanel p_4 = new UserTransfer_Cla();
// final JPanel p_5 = new UserWithdraw_Cla();
final JPanel p_1 = new JPanel();
final JPanel p_2 = new JPanel();
final JPanel p_3 = new JPanel();
final JPanel p_4 = new JPanel();
final JPanel p_5 = new JPanel();
p_1.setBackground(Color.black);
p_2.setBackground(Color.blue);
p_3.setBackground(Color.cyan);
p_4.setBackground(Color.DARK_GRAY);
p_5.setBackground(Color.gray);
jpC.setLayout(card);
jpC.add(p_1,"buy");
jpC.add(p_2,"deposit");
jpC.add(p_3,"money");
jpC.add(p_4,"transfer");
jpC.add(p_5,"withdraw");
jf = new JFrame("在线销售系统");
jf.add(jpN,BorderLayout.NORTH);
jf.add(jpW,BorderLayout.WEST);
jf.add(jpC,BorderLayout.CENTER);
jf.pack();
jf.setVisible(true);
tree.addTreeSelectionListener(new TreeSelectionListener(){
public void valueChanged(TreeSelectionEvent e) {
DefaultMutableTreeNode select = (DefaultMutableTreeNode)tree.getLastSelectedPathComponent();
if( select.toString().equals("购买商品") )
card.show(p_1,"buy");
else if( select.toString().equals("即时存款"))
card.show(p_2,"deposit");
else if( select.toString().equals("资金查询"))
card.show(p_3,"money");
else if( select.toString().equals("即时转账"))
card.show(p_4,"transfer");
else
card.show(p_5,"withdraw");
}});
}
public static void main(String[] args) {
new VisualPanel_user();
}
}问题:
点击【子节点】,弹出Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: wrong parent for CardLayout然后Eclipse显示出card.show(...)这里出错!
可是我的JPanel p_1到p_5装进jpC里面去了啊,jpC定义为CardLayout .问题在,但我不知道错在哪,也不会改?求指教!
public class VisualPanel_user {
JFrame jf = null ;
CardLayout card = null ;
public VisualPanel_user() {
JPanel jpN = new JPanel();
JPanel jpW = new JPanel();
JPanel jpC = new JPanel();
card = new CardLayout();
JLabel user_name = new JLabel("hello,"+Login_Cla.user_name);
JLabel title = new JLabel(" 欢迎进入系统 ");
user_name.setFont(new java.awt.Font("华文行楷", 0, 30));
title.setFont(new java.awt.Font("华文行楷", 0, 30));
jpN.add(user_name);
jpN.add(Box.createHorizontalStrut(100),"CENTER");
jpN.add(title,"CENTER");
jpN.add(Box.createHorizontalStrut(100),"CENTER");
jpN.setBorder(new Border(){
public Insets getBorderInsets(Component c) {
return new Insets(10,10,10,10);
}
public boolean isBorderOpaque() {
return false;
}
public void paintBorder(Component c, Graphics g, int x, int y,
int width, int height) {
}});
JScrollPane scroll=new JScrollPane();
final JTree tree = new JTree();
DefaultMutableTreeNode root = new DefaultMutableTreeNode();
DefaultMutableTreeNode buy = new DefaultMutableTreeNode();
DefaultMutableTreeNode deposit = new DefaultMutableTreeNode();
DefaultMutableTreeNode money = new DefaultMutableTreeNode();
DefaultMutableTreeNode transfer = new DefaultMutableTreeNode();
DefaultMutableTreeNode withdraw = new DefaultMutableTreeNode();
root.setUserObject("管理菜单");
buy.setUserObject("购买商品");
deposit.setUserObject("即时存款");
money.setUserObject("资金查询");
transfer.setUserObject("即时转账");
withdraw.setUserObject("即时取款");
root.add(buy);
root.add(deposit);
root.add(money);
root.add(transfer);
root.add(withdraw);
DefaultTreeModel dtm = new DefaultTreeModel(root);
tree.setModel(dtm);
scroll.setViewportView(tree);
jpW.add(scroll);// final JPanel p_1 = new UserBuy_Cla();
// final JPanel p_2 = new UserDeposit_Cla();
// final JPanel p_3 = new UserMoney_Cla();
// final JPanel p_4 = new UserTransfer_Cla();
// final JPanel p_5 = new UserWithdraw_Cla();
final JPanel p_1 = new JPanel();
final JPanel p_2 = new JPanel();
final JPanel p_3 = new JPanel();
final JPanel p_4 = new JPanel();
final JPanel p_5 = new JPanel();
p_1.setBackground(Color.black);
p_2.setBackground(Color.blue);
p_3.setBackground(Color.cyan);
p_4.setBackground(Color.DARK_GRAY);
p_5.setBackground(Color.gray);
jpC.setLayout(card);
jpC.add(p_1,"buy");
jpC.add(p_2,"deposit");
jpC.add(p_3,"money");
jpC.add(p_4,"transfer");
jpC.add(p_5,"withdraw");
jf = new JFrame("在线销售系统");
jf.add(jpN,BorderLayout.NORTH);
jf.add(jpW,BorderLayout.WEST);
jf.add(jpC,BorderLayout.CENTER);
jf.pack();
jf.setVisible(true);
tree.addTreeSelectionListener(new TreeSelectionListener(){
public void valueChanged(TreeSelectionEvent e) {
DefaultMutableTreeNode select = (DefaultMutableTreeNode)tree.getLastSelectedPathComponent();
if( select.toString().equals("购买商品") )
card.show(p_1,"buy");
else if( select.toString().equals("即时存款"))
card.show(p_2,"deposit");
else if( select.toString().equals("资金查询"))
card.show(p_3,"money");
else if( select.toString().equals("即时转账"))
card.show(p_4,"transfer");
else
card.show(p_5,"withdraw");
}});
}
public static void main(String[] args) {
new VisualPanel_user();
}
}问题:
点击【子节点】,弹出Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: wrong parent for CardLayout然后Eclipse显示出card.show(...)这里出错!
可是我的JPanel p_1到p_5装进jpC里面去了啊,jpC定义为CardLayout .问题在,但我不知道错在哪,也不会改?求指教!
你的 CardLayout.show(),用错了。第一个参数应该是 card 的 container
jpC, 而不应该是 card 自身。87行的 tree.addTreeSelectionListener
可更改为:
final JPanel cards = jpC;
tree.addTreeSelectionListener(new TreeSelectionListener(){
public void valueChanged(TreeSelectionEvent e) {
DefaultMutableTreeNode select = (DefaultMutableTreeNode)tree.getLastSelectedPathComponent();
if( select.toString().equals("购买商品") )
card.show(cards ,"buy");
else if( select.toString().equals("即时存款"))
card.show(cards ,"deposit");
else if( select.toString().equals("资金查询"))
card.show(cards ,"money");
else if( select.toString().equals("即时转账"))
card.show(cards ,"transfer");
else
card.show(cards ,"withdraw");
}});
取消使用frame就可以了
也谢谢你,提供这个思路!不过,想问你下,直接将类定义为extends JFrame和在类里面定义JFrame jf有区别么?
不用谢。修改后,我试了一下你的代码。写得不错,点击【子节点】的话,对应的 card 就会显示它的背景颜色。
大家互相学习!
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);final JPanel cards = jpC;
tree.addTreeSelectionListener(new TreeSelectionListener(){
......
// 省略
......
});// 建议2,把这放到最后
jf.pack();
jf.setVisible(true);
作为java方面的初学者被人夸,受宠若惊!
谢谢,java小菜鸟明白了 ...