JButton 扩展以占据整个框架/容器

9

大家好。我想制作一个带有按钮和标签的Swing GUI界面。我正在使用边界布局(Border Layout),标签(在北侧)显示正常,但按钮占据了整个框架(它位于中心位置)。有什么办法可以解决这个问题吗?

3个回答

13

你需要将按钮添加到另一个面板中,然后将该面板添加到框架中。

原来的BorderLayout会扩展中间的任何组件。

现在你的代码应该像这样:

之前的代码:

public static void main( String [] args ) {
    JLabel label = new JLabel("Some info");
    JButton button = new JButton("Ok");

    JFrame frame = ... 

    frame.add( label, BorderLayout.NORTH );
    frame.add( button , BorderLayout.CENTER );
    ....

}

将其更改为以下内容:

public static void main( String [] args ) {
    JLabel label = new JLabel("Some info");
    JButton button = new JButton("Ok");
    JPanel panel = new JPanel();
     panel.add( button );

    JFrame frame = ... 

    frame.add( label, BorderLayout.NORTH );
    frame.add( panel , BorderLayout.CENTER);
    ....

}

之前/之后

之前 http://img372.imageshack.us/img372/2860/beforedl1.png 之后 http://img508.imageshack.us/img508/341/aftergq7.png


面板的默认布局管理器是什么?FlowLayout? - Allain Lalonde

4

或者使用绝对布局,它在布局面板上。

或者通过以下方式启用:

frame = new JFrame();
... //your code here

// to set absolute layout.
frame.getContentPane().setLayout(null);

通过这种方式,您可以自由地将控件放置在任何地方。


0

再次出现 :)


    import javax.swing.*;

    public class TestFrame extends JFrame {
        public TestFrame() {
            JLabel label = new JLabel("Some info");
            JButton button = new JButton("Ok");
            Box b = new Box(BoxLayout.Y_AXIS);
            b.add(label);
            b.add(button);
            getContentPane().add(b);

        }
        public static void main(String[] args) {
            JFrame f = new TestFrame();
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            f.setLocationRelativeTo(null);
            f.setVisible(true);

        }
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接