我有这个程序我正在使用CardLayout。我有不同的面板具有不同的属性。我有一个名为“Enter”的按钮,我决定在每个面板上重复使用,但是当单击按钮时,每个面板执行不同的操作。有没有办法说,当点击按钮但我在特定面板时,然后执行此操作。我怎样才能直接指向面板?
答案 0 :(得分: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);
}
});
}
}
答案 1 :(得分:1)
每次创建卡片时,您都可以让面板为该按钮指定ActionListener
。这样,特定面板的构造函数可以确定按钮的功能。