为什么边界不适用于此GUI

时间:2013-08-07 00:06:30

标签: java swing layout jpanel

为什么面板上的界限首先不起作用?它只显示顶部的所有内容,并且不按我设置的顺序显示边界?单选按钮应显示在另一个下方,下一个按钮应显示在最右边但不起作用?

    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();
            }
        });
    }    
}

2 个答案:

答案 0 :(得分:2)

假设panelFirstJPanel之类的(或延伸),它将受布局管理器的控制(在这种情况下,很可能是FlowLayout)。< / p>

强烈建议您避免setBoundssetLocationsetSize,而是依赖布局管理器

图形界面需要在各种不同的平台上运行,每个平台都具有独特的渲染属性。为了解决这个问题,Java / Swing / AWT的开发人员设计了LayoutManager API。这样可以更轻松地开发可在多个不同平台上运行的复杂用户界面

查看Using Layout ManagersA Visual Guide to Layout Managers

答案 1 :(得分: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