黑马程序员技术交流社区

标题: CardLayout布局小问题,跪求答案??? [打印本页]

作者: 胡斌    时间: 2012-11-7 23:49
标题: CardLayout布局小问题,跪求答案???
import java.applet.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class myPanel extends JPanel{
        int x;
        JLabel j;
        myPanel(int a)
        {
                x=a;
                getSize();
                j=new JLabel("我是第"+x+"个标签");
                add(j);
        }
}
public class Buju extends Applet implements ActionListener{
        CardLayout card;
        myPanel mp[];
        JPanel p;
        private void addButton(JPanel pan,String butName,ActionListener listener)
        {
                JButton a = new JButton(butName);
                a.setActionCommand(butName);//问题1:这句话可有可无,但是显示的图型却不一样,为甚?
                /**
                 * .setActionCommand("good") 这名是设置JButton的动作命令。
这样在ActionListener覆盖的actionPerformed(ActionEvent e)
方法中通过参数e.getActionCommand()可以获取对应的动作命令,
这在一个ActionListener处理多个动作事件时比较有用*/
               
                a.addActionListener(listener);
                pan.add(a);
        }
        public void init()
        {
                setLayout(new BorderLayout());
                card = new CardLayout();
                this.setSize(400,150);
                p = new JPanel();
                p.setLayout(card);
                mp = new myPanel[10];
                for(int i=0;i<10;i++)
                {
                        mp=new myPanel(i+1);
                        p.add("A"+i,mp);//问题2:这里A是什么意思?
                }
                JPanel p2 = new JPanel();
                addButton(p2,"第一个",this);
                addButton(p2,"最后一个",this);
                addButton(p2,"前一个",this);
                addButton(p2,"后一个",this);
                add(p,"Center");
                add(p2,"South");
        }
        public void actionPerformed(ActionEvent e)
        {
                if(e.getActionCommand().equals("第一个"))
                        card.first(p);
                else if(e.getActionCommand().equals("最后一个"))
                        card.last(p);
                else if(e.getActionCommand().equals("前一个"))
                        card.previous(p);
                else if(e.getActionCommand().equals("后一个"))
                        card.next(p);
        }
}



作者: 胡斌    时间: 2012-11-7 23:54
加上a.setActionCommand();显示图形为:

l.jpg (273.47 KB, 下载次数: 33)

l.jpg

作者: 胡斌    时间: 2012-11-7 23:58
没加显示为:

1.jpg (179.55 KB, 下载次数: 33)

1.jpg

作者: 胡斌    时间: 2012-11-7 23:59
但是展开是对的?why??????????
作者: 陈军    时间: 2012-11-8 10:40
关于AbstractButton 类的getActionCommand()和setActionCommand()是对应的。
也就是说如果你想正常的使用getActionCommand()就必须先setActionCommand,否则肯定出问题

还有这2句话有问题一放到 Eclipse就报错。
mp=new myPanel(i+1);         //mp是一个JmyPanel的数组变量,右边是一个非数组的对象。
                          p.add("A"+i,mp);  // 这里不匹配。。
说实话。LZ。SWING里面我还没仔细 用过CardLayout.。。汗。
在swing里面其实问题很多。 慢慢实践就会发现的。


作者: 胡斌    时间: 2012-11-8 13:07
陈军 发表于 2012-11-8 10:40
关于AbstractButton 类的getActionCommand()和setActionCommand()是对应的。
也就是说如果你想正常的使 ...

我这个程序是测试过的,没有问题?
只是上面红色的两个小问题?




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2