我有两个班,一个是主班,另一班是专业班。主要课程有介绍性小组,进一步显示专业小组。专业类的第二个面板有“Home”按钮,需要显示主类面板。请告诉我如何让“主页”按钮工作?
class proMain extends JPanel {
JPanel pan2 = new JPanel();
JButton b1, b2, b3;
CardLayout lay = new CardLayout();
public void pshow() {
// First Panel
pan.setBackground(Color.red);
b1 = new JButton("Next");
b1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
if (ae.getActionCommand().equals("Next")) {
pan2.setVisible(true);
pan.setVisible(false);
}
}
});
pan.add(b1);
// Second Panel
b2 = new JButton("Previous");
b2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
if (ae.getActionCommand().equals("Previous")) {
pan.setVisible(true);
pan2.setVisible(false);
}
}
});
b3 = new JButton("Home");
b3.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
if (ae.getActionCommand() == "Home") {
//
}
}
});
pan2.setBackground(Color.cyan);
pan2.add(b2);
pan2.add(b3);
pan.setVisible(true);
pan2.setVisible(false);
add(pan);
add(pan2);
}
}
上面的类是proMain类,主要类是:
public class proDis {
public static void main(String[] args) {
JFrame fr = new JFrame("CrdLay");
JPanel pan3 = new JPanel();
JButton b = new JButton("Next");
CardLayout cl = new CardLayout();
fr.setLayout(cl);
b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
if (ae.getActionCommand().equals("Next")) {
pan3.setVisible(false);
proMain pm = new proMain();
pm.pshow();
pm.setLayout(cl);
fr.add(pm);
pm.setVisible(true);
}
}
});
pan3.setBackground(Color.gray);
pan3.add(b);
fr.setSize(100, 300);
fr.setVisible(true);
fr.add(pan3);
}
}
答案 0 :(得分:1)
您正在尝试使用CardLayout
,这是正确的方法。但是,您的实现不正确。
您的代码存在的问题是您没有使用CardLayout
的方法来控制显示哪个面板。 CardLayout
支持方法。例如next(...)
和previous(...)
按顺序移动所有面板和方法show(...)
以显示特定面板。
因此,首先要做的是在将每个面板添加到布局时为面板命名。然后更改代码以使用上述方法来控制显示哪个面板。没有必要使用任何面板的可见性,这是CardLayout
的作用。
阅读How to Use CardLayout上Swing教程中的部分,了解更多信息和工作示例。