Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将元件放置在CardLayout面板的中心_Java_Swing_Layout Manager_Gridbaglayout_Cardlayout - Fatal编程技术网

Java 如何将元件放置在CardLayout面板的中心

Java 如何将元件放置在CardLayout面板的中心,java,swing,layout-manager,gridbaglayout,cardlayout,Java,Swing,Layout Manager,Gridbaglayout,Cardlayout,我有一个框架,有两个面板,它们会随着卡片布局的变化而变化。 在每个面板内,我将有不同的组件。为了设计面板的GUI,我使用了GridBagLayout。但问题是我为这些面板使用的任何组件或布局,它们都位于页面顶部。所以基本上CardLayout的面板尺寸是框架的一小部分。我想使子面板的大小与主CardLayout的大小一样大 主卡布局代码: public class MainPanel extends JPanel { private CardLayout cl = new CardLay

我有一个框架,有两个面板,它们会随着卡片布局的变化而变化。 在每个面板内,我将有不同的组件。为了设计面板的GUI,我使用了GridBagLayout。但问题是我为这些面板使用的任何组件或布局,它们都位于页面顶部。所以基本上CardLayout的面板尺寸是框架的一小部分。我想使子面板的大小与主CardLayout的大小一样大

主卡布局代码:

public class MainPanel extends JPanel {
    private CardLayout cl = new CardLayout();
    private JPanel panelHolder = new JPanel(cl);

    public MainPanel() {
        NewSession session = new NewSession(this);
        ChooseSource chooseSource = new ChooseSource(this);

        panelHolder.add(session, "1");
        panelHolder.add(chooseSource, "2");

        cl.show(panelHolder, "dan");
        add(panelHolder);
    }
    public void showPanel(String panelIdentifier){
        cl.show(panelHolder, panelIdentifier);
    }
}
A小组:

public class ChooseSource extends JPanel {
    MainPanel ob2;
    JButton btn;
    JLabel label;
    JTextField field;

    public ChooseSource(MainPanel mainPanel){
        this.ob2 = mainPanel;


        btn = new JButton("Browse");
        label = new JLabel("Folder ");
        field = new JTextField();

        btn.addActionListener(new ActionListener(){
            @Override
            public void actionPerformed(ActionEvent e){
                ob2.showPanel("1");

            }
        });


        GridBagLayout layout = new GridBagLayout();
        setLayout(layout);

        GridBagConstraints c = new GridBagConstraints();

        c.fill = GridBagConstraints.HORIZONTAL;
        c.gridx = 0;
        c.gridy = 0;
        c.ipady = 20;
        c.gridheight = 2;
        add(btn, c);

        c.fill = GridBagConstraints.HORIZONTAL;
        c.gridx = 1;
        c.gridy = 0;
        c.ipady = 10;
        c.gridheight = 1;
        c.insets = new Insets(0,10,0,0); 
        add(label, c);

        c.fill = GridBagConstraints.HORIZONTAL;
        c.gridx = 1;
        c.gridy = 1;
        c.ipady = 0;
        c.gridheight = 1;
        c.insets = new Insets(0,10,0,0); 
        add(field, c);
    }
}
左边的图片显示了它是怎样的,右边的图片是我正在尝试制作的。基本上我想进入面板的所有可用空间

有什么想法吗


MainPanel
的布局管理器更改为
BorderLayout
gridbagloayout
MainPanel
的布局管理器更改为
BorderLayout
gridbagloayout
的布局管理器,但我让这个程序有点像是基于向导的。如果我删除CardLayout并将其更改为BorderLaylout,这会把整个想法搞砸。@Dan:然后两者都用。让CardLayout容器保存一个使用BorderLayout或GridBagLayout的JPanel。不,我没有说要删除应用于panelHolder的
CardLayout
,我说的是更改
MainPanel
…的布局,它负责保存
panelHolder
…但我让这个程序有点像是基于向导的。如果我删除CardLayout并将其更改为BorderLaylout,这会把整个想法搞砸。@Dan:然后两者都用。让CardLayout容器保存一个使用BorderLayout或GridBagLayout的JPanel。不,我没有说要删除
CardLayout
,它应用于
panelHolder
,我说的是更改
MainPanel
…的布局,它负责保存
panelHolder
。。。