如何将由方法创建的JPanel添加到cardLayout.add();

时间:2013-03-28 18:39:10

标签: java swing jframe jpanel cardlayout

下面的

是guiFrames的用户类。我想要一个用方法创建几个JFrame的类,并将这些方法传递给cardLayout。原因是每个JFrame将根据用户选择的内容显示不同的按钮。

所以,我想我会为各个面板创建方法,并根据传递的参数显示不同的按钮。我需要将面板显示在cardLayout中。但是我无法将方法传递给cardLayout.add();因为它说方法类型无效。所以我试着让方法返回一个Component,但它没有用完。请帮助。

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

public class guiFrames extends JFrame{

  public guiFrames(){
  }

  public Component inputFrame(){
    JFrame inputFrame = new JFrame("Input");

    JPanel inputPnl = new JPanel();
    inputPnl.setLayout(new GridLayout(3,2));

    JLabel loginLbl = new JLabel("Login");
    inputPnl.add(loginLbl);
    JTextField loginTxt = new JTextField();
    inputPnl.add(loginTxt);
    JLabel pwLbl = new JLabel("Password");
    inputPnl.add(pwLbl);
    JTextField pwTxt = new JTextField();
    inputPnl.add(pwTxt);

    JPanel buttonPnl = new JPanel();
    buttonPnl.setLayout(new FlowLayout(FlowLayout.LEFT, 1,5));

    JButton submit = new JButton("Submit");
    buttonPnl.add(submit);
    JButton output = new JButton("Output");
    buttonPnl.add(output);

    JPanel container = new JPanel();
    container.setLayout(new BorderLayout());
    container.add(inputPnl, BorderLayout.CENTER);
    container.add(buttonPnl, BorderLayout.SOUTH);

    inputFrame.add(container);
    inputFrame.pack();
    inputFrame.setVisible(true);
    inputFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    return;
  }

  public void cardView(){
        JFrame cardFrame = new JFrame();
        JPanel cardGUI = new JPanel();
        CardLayout cards = new CardLayout();
        cardGUI.setLayout(cards);
        cardGUI.add(inputFrame(), "first");

        cardFrame.add(cardGUI, BorderLayout.CENTER);
        cardFrame.pack();
        cardFrame.setVisible(true);
        cardFrame.setDefaultCloseOperation(cardFrame.EXIT_ON_CLOSE);
  }
}

1 个答案:

答案 0 :(得分:3)

在inputFrame()的末尾,你没有返回任何内容。你需要返回inputFrame,如下所示:

return inputFrame;

希望有所帮助。