Java 为什么边界不能在这个GUI上工作

Java 为什么边界不能在这个GUI上工作,java,swing,layout,jpanel,Java,Swing,Layout,Jpanel,为什么panelFirst上的边界不起作用?它只在顶部显示所有内容,而不按照我设置的顺序显示边界?单选按钮应显示在另一个按钮下方,下一个按钮应显示在最右侧,但它不工作 public MyWizard() { panelContainer.setLayout(c1); panelFirst.add(btNext); panelSecond.add(btNextTwo); panelFirst.setBackground(Col

为什么panelFirst上的边界不起作用?它只在顶部显示所有内容,而不按照我设置的顺序显示边界?单选按钮应显示在另一个按钮下方,下一个按钮应显示在最右侧,但它不工作

    public MyWizard() {
        panelContainer.setLayout(c1);
        panelFirst.add(btNext);
        panelSecond.add(btNextTwo);
        panelFirst.setBackground(Color.BLUE);
        panelSecond.setBackground(Color.RED);
        panelThird.setBackground(Color.GREEN);
        panelContainer.add(panelFirst, "1");
        panelContainer.add(panelSecond,"2");
        panelContainer.add(panelThird,"3");
        c1.show(panelContainer, "1");           
        btNext.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent arg0) {
                c1.show(panelContainer,"2");                    
            }               
        });

        btNextTwo.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent arg0) {
                c1.show(panelContainer,"3");                    
            }               
        });
        RadioButtons();
        Button();
        frame.add(panelContainer);
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.pack();
        frame.setSize(600,360);
        frame.setVisible(true);
    }

    public void RadioButtons() {
        btLdap = new JRadioButton ("Ldap");
        btLdap.setBounds(60,85,100,20);
        panelFirst.add(btLdap);         
        btKerbegos = new JRadioButton ("Kerbegos");
        btKerbegos.setBounds(60,115,100,20);
        panelFirst.add(btKerbegos);         
        btSpnego =new JRadioButton("Spnego");
        btSpnego.setBounds(60,145,100,20);
        panelFirst.add(btSpnego);
                    btSaml2 = new JRadioButton("Saml2");
        btSaml2.setBounds(60,175,100,20);
        panelFirst.add(btSaml2);
    }

    public void Button() {
        btNext.setBounds(400,260,100,20);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new MyWizard();
            }
        });
    }    
}

假设
panelFirst
类似于
JPanel
,它将由布局管理器控制(在这种情况下,很可能是
FlowLayout

强烈建议您避免
setBounds
setLocation
setSize
而依赖布局管理器

图形界面需要在各种不同的平台上运行,每个平台都具有独特的渲染属性。为了解决这个问题,Java/Swing/AWT的开发人员设计了
LayoutManager
API。这使得开发能够在多个不同平台上工作的复杂用户界面变得更加容易


查看并

假设
panelFirst
类似于
JPanel
,它将由布局管理器控制(在这种情况下,很可能是
FlowLayout

强烈建议您避免
setBounds
setLocation
setSize
而依赖布局管理器

图形界面需要在各种不同的平台上运行,每个平台都具有独特的渲染属性。为了解决这个问题,Java/Swing/AWT的开发人员设计了
LayoutManager
API。这使得开发能够在多个不同平台上工作的复杂用户界面变得更加容易


查看和

如果您的单选按钮应该位于彼此下方,则为它们创建一个面板,并将面板的布局设置为
BoxLayout
,如下所示:

JPanel p = new JPanel();
p.setLayout(new BoxLayout(p,BoxLayout.Y_AXIS));

p.add(...);
//then add p to the fram's container or to some other container

如果您的单选按钮应位于彼此下方,则为它们创建一个面板,并将面板的布局设置为
BoxLayout
,如下所示:

JPanel p = new JPanel();
p.setLayout(new BoxLayout(p,BoxLayout.Y_AXIS));

p.add(...);
//then add p to the fram's container or to some other container

因为您使用的是
LayoutManager
如何修复?如果我去掉.setLayout,那么整个事情就不起作用了。如果我去掉线程“AWT-EventQueue-0”java.lang.IllegalArgumentException中的异常,我会得到这个错误:CardLayout的错误父级出于许多原因,你应该使用
LayoutManager
,默认情况下,面板有
FlowLayout
setBounds
您必须
setLayout(null)
,但它只是一个panelcontainer.setLayout(null);我确实这样做了,但是我在线程“AWT-EventQueue-0”java.lang.IllegalArgumentException中得到了这个异常:java.AWT.CardLayout.checkLayout(未知源)在java.AWT.CardLayout.show(未知源)在MyWizard中的CardLayout是错误的父级。MyWizard$3.run(MyWizard.java:87)在java.awt.event.InvocationEvent.dispatch(未知源代码)在java.awt.EventQueue.dispatchEventImpl(未知源代码)处,因为您使用的是
LayoutManager
如何修复?如果我去掉.setLayout,那么整个事情就不起作用了。如果我去掉线程“AWT-EventQueue-0”java.lang.IllegalArgumentException中的异常,我会得到这个错误:CardLayout的错误父级出于许多原因,你应该使用
LayoutManager
,默认情况下,面板有
FlowLayout
setBounds
您必须
setLayout(null)
,但它只是一个panelcontainer.setLayout(null);我确实这样做了,但是我在线程“AWT-EventQueue-0”java.lang.IllegalArgumentException中得到了这个异常:java.AWT.CardLayout.checkLayout(未知源)在java.AWT.CardLayout.show(未知源)在MyWizard中的CardLayout是错误的父级。MyWizard$3.run(MyWizard.java:87)java.awt.event.InvocationEvent.dispatch(未知源)java.awt.EventQueue.dispatchEventImpl(未知源)