有没有办法在BorderLayout中移动JPanel?

时间:2016-06-21 13:11:01

标签: java swing jpanel layout-manager

我正在使用BorderLayout作为框架(第一个“抓住了我的注意力”)和FlowLayout作为标签(我发现适合我做的那个) ,结果显示如下:

enter image description here

我的目标是将“2 * 1”稍稍向下推,使其“居中”。

我环顾四周,发现很多人都说使用空布局,但后来说它不是最好的选择(即使我的窗口不可调整大小),而我发现的另一个解决方案是使用布局组合(除非我误解了)。

问题是最重要的问题,如果不是,那么什么是最好的选择呢? (以下是制作此窗口的代码(减去变量和其他方法,以简化可视化)。

public Frame() {
    super("Jogo de Multiplicar!");
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setLayout(new BorderLayout());
    setSize(300, 200);
    setResizable(false);
    getContentPane().setBackground(pink);

    mensagem = new TransparentPanel();
    operacao = new TransparentPanel();  

    //added stuff in mensagem and operacao

    add(operacao);
    add(mensagem, BorderLayout.SOUTH);
}

2 个答案:

答案 0 :(得分:3)

  

我环顾四周,发现很多人都说使用空布局

避免这个建议。每当我在论坛中看到该建议时,通常会在论坛中向更有经验的用户投票。

  

我的目标是推动" 2 * 1"一点点,以及#34;中心"它

如果您只想在顶部留出更多空间,那么您可以使用Border

operacao.setBorder(new EmptyBorder(...));

阅读How to Use Borders上Swing教程中的部分以获取更多信息。

如果您想要实际居中,可以使用BoxLayout

Box box = Box.createVerticalBox();
box.add( Box.createVerticalGlue() );
box.add( topPanel );
box.add( Box.createVerticalGlue() );
box.add( bottomPanel );

本教程还有一个关于How to Use BoxLayout的部分。搜索目录。

答案 1 :(得分:2)

您可以使用MigLayout作为唯一的LayoutManager。它非常强大,并且通常提供其他经理所做的一切。

使用它可以非常简单地将组件集中在一起:

public class MultiplyExample extends JFrame{
    private static final long serialVersionUID = 1L;

    JLabel testLabel = new JLabel("2*2 = 4"); 
    public MultiplyExample(){
        super("Example");
        setBounds(300, 50, 200, 200);
        // Set the MigLayout, so that columns and then rows get centered
        setLayout(new MigLayout("center, center"));
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        add(testLabel);
    }

    public static void main(String[] args) {
        JFrame testFrame = new MultiplyExample();
        testFrame.setVisible(true);
    }
}

结果:

Centered Example

以下是MigLayout提供的演示:

http://www.miglayout.com/swingdemoapp.jnlp

以下是快速入门指南:

http://www.miglayout.com/QuickStart.pdf

如果您 使用BorderLayout,您可以将您的组件放到另一个面板上,并使用BorderLayout.CENTER将其放入中心:

pane.add(button, BorderLayout.CENTER);