【问题标题】:Is there a way of moving JPanel in BorderLayout?有没有办法在 BorderLayout 中移动 JPanel?
【发布时间】:2016-06-21 13:11:00
【问题描述】:

我将BorderLayout 用于框架(第一个“吸引”我注意力的框架)和FlowLayout 用于标签(我发现适合我所做的那个),结果显示如下:

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

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

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

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

【问题讨论】:

  • 如果我理解你的解释,你可以使用 GridBagLayout
  • 1) 为了尽快获得更好的帮助,请发帖 minimal reproducible exampleShort, Self Contained, Correct Example。 2) 以最小尺寸提供 ASCII 艺术或 GUI 的 预期 布局的简单绘图,如果可调整大小,则具有更大的宽度和高度。
  • 你可以使用netbeans拖放gui创建器。
  • @scarecrow- 这种方法的问题在于,除非程序员知道如何手动编写代码,否则使用 GUI 设计器会产生糟糕(且脆弱)的 GUI。在您有更多创建跨平台 GUI 的经验之前,请不要提供布局建议。

标签: java swing jpanel layout-manager


【解决方案1】:

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

避免该建议。每当我在论坛中看到该建议时,通常都会遭到论坛中更有经验的用户的反对。

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

如果您只想在顶部有更多空间,则可以使用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 的部分。搜索目录。

【讨论】:

    【解决方案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);
        }
    }
    

    结果:

    这是MigLayout 提供的演示:

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

    这是一个快速入门指南:

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

    如果您必须使用BorderLayout,您可以将您的组件放在另一个面板上,然后使用BorderLayout.CENTER 将这个组件放在中心:

    pane.add(button, BorderLayout.CENTER);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-17
      • 2018-07-10
      • 1970-01-01
      相关资源
      最近更新 更多