[英]JButton positioning, does not appear
在我的代码中,我有一个JFrame可以打开一个主菜单,在该菜单中您可以单击选项,这将带您进入选项菜单。 在该选项菜单上,我想创建一个后退按钮,将其放置在屏幕左上角的某个位置。 当我运行程序并转到选项菜单时,JButton不会出现。 我的代码一定有问题。 有什么帮助吗? 下面是我首先声明JButton的位置。
static JButton optionsBackButton = new JButton("<html><font size = 5
color = green>Back</font></html>");
这是与JButton有关的代码的另一部分。
//Options Menu
JPanel optionsPanel = new JPanel();
JLabel optionsOptionsTitle = new JLabel("<html><font size = 7 color = blue>Options</font></html>");
JPanel optionsOptionsTitlePanel = new JPanel();
JPanel optionsBackButtonPanel = new JPanel();
optionsPanel.setLayout(null);
optionsBackButton.setBounds(100,100,50,50);
optionsBackButtonPanel.add(optionsBackButton);
optionsOptionsTitlePanel.add(optionsOptionsTitle);
optionsPanel.add(optionsOptionsTitlePanel);
optionsPanel.add(optionsBackButtonPanel);
optionsBackButton.addActionListener(this);
//Add panels to the card
panel.add("Home Screen", homePanel);
panel.add("Options Menu", optionsPanel);
//card.add("Game screen", gamePanel);
cardLayout.show(panel, "HomeScreen");
contentPane.add(panel);
您的问题源于您使用null
布局。 注意:
JPanel optionsBackButtonPanel = new JPanel(); // holds the back button
// but never given a size
optionsPanel.setLayout(null); // uh oh,.... bad news
optionsBackButton.setBounds(100,100,50,50); // yes you set the bounds of the button
optionsBackButtonPanel.add(optionsBackButton);
optionsOptionsTitlePanel.add(optionsOptionsTitle);
optionsPanel.add(optionsOptionsTitlePanel);
optionsPanel.add(optionsBackButtonPanel); // again, optionsBackButtonPanel
// has been never given a size or location/bounds
optionsBackButton.addActionListener(this);
因此,您可以设置按钮的边界并将其添加到使用默认FlowLayout
的JPanel中,因此边界是没有意义的。 然后,将从未设置其边界的JPanel添加到使用空布局的JPanel。 因此optionsBackButtonPanel将永远不会显示。
解决方案: 不要使用null布局 ,而是学习和使用布局管理器。
尽管null布局和setBounds()
似乎是Swing新手创建复杂GUI的最简单和最佳方法,但您创建的Swing GUI越多,使用它们时就会遇到更大的困难。 当GUI调整大小时,它们不会调整组件的大小;它们是要增强或维护的皇家女巫;放置在滚动窗格中时,它们会完全失败;在所有平台或与原始分辨率不同的屏幕分辨率下查看时,它们看起来都是令人毛骨悚然的。
从这里开始: 在容器教程中布置组件
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.