Java swing方法setLayout null不起作用

时间:2014-12-13 20:34:15

标签: java

import javax.swing.*;
import java.awt.*;

class MenuPanel extends JPanel {
    JButton setTextColor;
    JSlider setMobNumber;
    MenuPanel() {
        setLayout(null);
        setBackground(Color.LIGHT_GRAY);

        setTextColor = new JButton("Change Text Color");
        setMobNumber = new JSlider(1, 10);

        setTextColor.setBounds(10, 40, 20, 10);
        setMobNumber.setBounds(10, 80, 20, 10);

        add(setTextColor);
        add(setMobNumber);

        setTextColor.setFocusable(false);
        setMobNumber.setFocusable(false);
    }
}

class GameBoard extends JFrame {
    MenuPanel menuPanel = null;
    GameBoard() {
        setTitle("MyGame");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new BorderLayout());

        menuPanel = new MenuPanel();
        add(menuPanel, BorderLayout.WEST);

        setSize(600, 500);
        setVisible(true);
    }
}

public class MyGame {
    public static void main(String args[]) {
        new GameBoard();
    }
}

这是我的Java代码。我想在主框架上制作菜单面板。所以我做了上面的代码并附上了 主框架代码上的“添加(menuPanel)”。但是我的菜单面板没有显示出来。我该怎么办。我想 对此很难。但我不知道我做错了什么。

2 个答案:

答案 0 :(得分:1)

避免使用null布局,像素完美布局是现代ui设计中的一种幻觉。影响组件个体大小的因素太多,您无法控制。 Swing旨在与布局管理器一起工作,放弃这些将导致问题和问题的终结,您将花费越来越多的时间来纠正

BorderLayout依赖于您的MenuPanel首选大小来说明它可能的大小,这些信息通常由布局管理器生成,但是因为您已将布局管理器设置为{ {1}},它使用默认大小null代替。

简单的答案是使用适当的布局管理器并允许底层API做出关于如何布置最佳组件的决策,其中考虑了这些组件可能需要在不同方面进行大小调整的差异系统...

请查看Laying Out Components Within a Container了解详情

答案 1 :(得分:0)

我刚刚测试了您的代码并且它可以正常工作,但框架没有调整到面板大小,因此看起来没有添加面板。但是,调整框架大小将显示面板。尝试使用setPreferredSize(new Dimension(width, height))为面板指定首选尺寸,然后在添加pack()后在框架上调用MenuPanel