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代码。我想在主框架上制作菜单面板。所以我做了上面的代码,并在主框架代码上附加了"add(menuPanel)“。但是我的菜单面板没有显示出来。我该怎么办呢。我对此深思熟虑。但我不知道我做错了什么。
发布于 2014-12-14 05:36:58
避免使用null布局,像素完美布局在现代ui设计中是一种错觉。有太多的因素会影响组件的单个大小,但没有一个是您可以控制的。Swing被设计为以布局管理器为核心进行工作,丢弃这些将导致无休止的问题和问题,您将花费越来越多的时间来尝试纠正这些问题
BorderLayout依赖于您的MenuPanel首选大小来判断它可能需要的大小,此信息通常由布局管理器生成,但由于您已将布局管理器设置为null,因此它将使用默认大小0x0。
简单的答案是使用适当的布局管理器,并允许底层API决定如何最好地布局组件,这将考虑这些组件在不同系统上可能需要如何调整大小的差异……
有关更多详细信息,请查看Laying Out Components Within a Container
发布于 2014-12-14 04:54:56
我刚刚测试了你的代码,它可以工作,但是框架没有调整到面板的大小,所以看起来面板还没有被添加。但是,调整框架的大小将显示面板。尝试使用setPreferredSize(new Dimension(width, height))设置面板的首选大小,然后在添加MenuPanel后在框架上调用pack()。
https://stackoverflow.com/questions/27463348
复制相似问题