【问题标题】:Empty JPanel not positioning correctly in relation to other JPanels空 JPanel 相对于其他 JPanel 未正确定位
【发布时间】:2012-04-09 20:31:29
【问题描述】:

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

  1. 一行标签
  2. 一列 JButtons
  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();
    }
}

【问题讨论】:

  • 如需尽快获得更好的帮助,请发布SSCCE。顺便说一句 - 你有问题吗?
  • 随机问题,您是否尝试过更改添加组件的顺序?
  • 您可能(无意中)将pickupButtons 添加到dropButtons
  • 这让我想起了“Tappet”兄弟的 Click and Clack 广播节目的俄罗斯司机,Pikop Andropov 先生。
  • 出于我的好奇心,有两种方法可以使用或不使用 GlassPane / JLayer

标签: java swing jpanel


【解决方案1】:

看看你的代码:

    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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-14
    • 2018-08-25
    • 2014-05-05
    • 2019-03-17
    • 2014-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多