如何识别动态创建的jbutton动作

时间:2015-05-23 05:24:29

标签: java swing

我在一个面板中创建两个jbuttons(可以是Box).i在同一帧中动态创建相同的面板几次。如果两个面板动态创建,那些按钮使用相同的变量名称。但我想逐个识别按钮for actions actions.how逐个识别动态创建的按钮?

按钮创建代码

    public class Jscrollpanetest extends JFrame {

    JScrollPane scrollPane;
    Box box;
    private static int panelCount = 0;

    public Jscrollpanetest() {
        setPreferredSize(new Dimension(200, 400));
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        scrollPane = new JScrollPane();
        scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
        scrollPane.getVerticalScrollBar().setUnitIncrement(15);
        box = Box.createVerticalBox();
        scrollPane.getViewport().add(box);

        this.add(scrollPane);
        this.pack();
        this.setLocationRelativeTo(null);
        this.setVisible(true);


        Timer t = new Timer(1000, new ActionListener() {

            public void actionPerformed(ActionEvent ae) {
                box.add(new TestPanel(), box.size());

                scrollPane.validate();
            }
        });
        t.setRepeats(true);
        t.start();


    }

    public class TestPanel extends JPanel {

        int myId = panelCount++;

        public TestPanel() {
            this.setLayout(new GridBagLayout());
            this.setBorder(BorderFactory.createBevelBorder(1));
            JButton up = new JButton("^");
            JLabel rate = new JLabel("1");
            JButton down = new JButton("^");
            JLabel label = new JLabel("" + myId);
            label.setHorizontalAlignment(JLabel.CENTER);
            label.setVerticalAlignment(JLabel.CENTER);

            this.setMaximumSize(new Dimension(1000, 200));
            this.setPreferredSize(new Dimension(1000, 100));

            this.add(label);
            this.add(up);
            this.add(rate);
            this.add(down);
        }
    }

    public static void main(String[] args) {
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                Jscrollpanetest testScrollPane = new Jscrollpanetest();
            }
        });
    }
}

1 个答案:

答案 0 :(得分:0)

如果使用动态创建ActionListener则没有问题。因此每个按钮都有自己的ActionListener

如果使用公共ActionListener,则必须将标记添加到每个按钮作为扩展JButton