2

我正在使用 swing 使用 BorderLayout 管理器在一个 JPanel 内构建一个带有 4 个 JPanel 的 GUI:

  1. 一排标签
  2. 一列 JButton
  3. 显示区域(它是一个扩展 JPanel 的类,没有添加任何内容,用作绘图区域)
  4. 另一列按钮

我的代码如下所示:

    JPanel middle = new JPanel();
    middle.setLayout(new BorderLayout());
    middle.add(midLabels,BorderLayout.NORTH);
    middle.add(pickupButtons,BorderLayout.WEST);
    middle.add(simulation,BorderLayout.CENTER);
    middle.add(dropButtons,BorderLayout.EAST);

模拟面板只是一个扩展的 JPanel,它覆盖了paintComponent 以绘制图像。问题是,模拟区域在左边而不是在中间:

错误的布局

我真正想要的是:

在此处输入图像描述

编辑,这是一个例子,我是否需要使用不同的布局管理器来正确定位空 JPanel?:

import java.awt.*;
import javax.swing.*;
public class Test extends JFrame {  
    final static int MAXFLOORS = 8;
    public Test() {
        setLayout(new BorderLayout());
        setTitle("Simulator");
        setVisible(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setSize(500, 500);

        JPanel simulation = new JPanel();
        JPanel dropButtons = new JPanel();
        JPanel pickupButtons = new JPanel();

        pickupButtons.setLayout(new GridLayout(MAXFLOORS, 1));
        dropButtons.setLayout(new GridLayout(MAXFLOORS, 1));
        setLayout(new BorderLayout());      
        add(simulation,BorderLayout.CENTER);
        add(dropButtons,BorderLayout.EAST);
        add(pickupButtons,BorderLayout.WEST);

        for (int i = MAXFLOORS; i != 0; i--) {
            JButton pb = new JButton("F" + i);
            dropButtons.add(pb);

            JButton db = new JButton("F" + i);
            dropButtons.add(db);
        }       
        repaint();
    }
    public static void main(String[] args) {
        new Test();
    }
}
4

1 回答 1

3

看看你的代码:

    for (int i = MAXFLOORS; i != 0; i--) {
        final JButton pb = new JButton("F" + i);
        dropButtons.add(pb);

        final JButton db = new JButton("F" + i);
        dropButtons.add(db);
    }

您要添加dropButtons两次,而不是pickupButtons.

于 2012-04-09T22:03:58.863 回答