0

为什么 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();
            }
        });
    }    
}
4

2 回答 2

2

假设它panelFirst是(或扩展自)类似的东西JPanel,它将处于布局管理器的控制之下(在这种情况下,很可能是 a FlowLayout)。

强烈建议您避免使用setBoundssetLocation而是setSize依赖布局管理器

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

看看使用布局管理器和布局管理器的视觉指南

于 2013-08-07T00:10:39.603 回答
1

如果您的单选按钮应该在彼此下方,则为它们创建一个面板,并将面板的布局设置为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
于 2013-08-07T00:16:30.620 回答