0

我有这个程序,我在其中使用 CardLayout。我有不同属性的不同面板。我有一个名为“Enter”的按钮,我决定在每个面板上重复使用它,但是当单击该按钮时,每个面板都会执行不同的操作。有没有办法说,当单击按钮但我在特定面板时,然后执行此操作。如何直接指向面板?

4

2 回答 2

3

您必须考虑的第一件事是:您不能将一个按钮添加到多个面板,每个面板都应该有自己的组件。

如果您向多个面板添加一个按钮,请说:

JButton b = new JButton("Button");
//....
pan1.add(b);
pan2.add(b);
pan3.add(b);

在这种情况下,按钮将被添加到最后一个面板意味着pan3,另一个不会显示按钮。

其次,我想@trashgod's从评论中提一个很好的例子,如果混淆,请看这个例子:

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;

public class CardLayoutDemo extends JFrame implements ActionListener {
    private CardLayout cardLayout;
    private JButton pan1,pan2;
    private JPanel mainPanel;
    public CardLayoutDemo(){
        cardLayout = new CardLayout();
         mainPanel = new JPanel(cardLayout);
        JPanel p1 = new JPanel();
        JPanel p2 = new JPanel();
        pan1 = new JButton("To Second Panel");
        pan2= new JButton ("To First Panel");
        pan1.addActionListener(this);
        pan2.addActionListener(this);
        p1.setBackground(Color.green);
        p2.setBackground(Color.BLUE.brighter());
        p1.add(pan1);
        p2.add(pan2);
        mainPanel.add(p1,"1");
        mainPanel.add(p2,"2");
        cardLayout.show(mainPanel, "1");

        add(mainPanel);
        setDefaultCloseOperation(3);
        setLocationRelativeTo(null);
        setVisible(true);
        pack();
    }
    @Override
    public void actionPerformed(ActionEvent ev){
        if(ev.getSource()==pan1)
            cardLayout.show(mainPanel, "2");
        else if(ev.getSource()==pan2)
            cardLayout.show(mainPanel, "1");
    }

    public static void main(String...args){
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
              new CardLayoutDemo().setVisible(true);

            }
        });
    }
}
于 2013-08-11T02:01:15.837 回答
1

您可以让面板ActionListener在每次创建卡片时为按钮分配一个。这样,特定面板的构造函数就可以确定按钮的功能。

于 2013-08-11T01:47:49.997 回答