总结一下我的问题,我正在为Java应用程序开发接口。我遇到了一个以前从未遇到过的问题。 为了创建一种“导航栏”,我在JFrame的顶部创建了一个瘦JPanel。然后,我想在其中添加一个JButton来代表“主页”按钮,该按钮将导致应用程序的启动内容。当我这样做时,使Button的宽度和高度等于Panel的高度,Button与Panel的顶部之间有大约3个像素的小间隙。我不知道为什么,面板中没有其他元素。我没有使用任何布局,但是我尝试使用FlowLayout修复该问题,但并没有真正改变。
这是该界面的完整代码,我在菜单面板上标记了红色,仅用于测试目的。如何摆脱顶部的小缝隙?
package UserInterface;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Toolkit;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Interface {
private JFrame frame;
private JPanel menu;
private JPanel content;
public JButton home;
public Interface() {
Dimension dim = new Dimension(50, 50);
frame = new JFrame();
menu = new JPanel();
content = new JPanel();
frame.setSize(1600, 900);
menu.setSize(1600, 50);
content.setSize(1600, 850);
frame.setTitle("Tierland");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocation(
(int)((Toolkit.getDefaultToolkit().getScreenSize().getWidth() / 2) - (frame.getWidth() / 2)),
(int)((Toolkit.getDefaultToolkit().getScreenSize().getHeight() / 2) - (frame.getHeight() / 2))
);
frame.setSize(1600, 900);
menu.setSize(1600, 50);
content.setSize(1600, 850);
menu.setBackground(Color.RED);
home = new JButton();
home.setPreferredSize(dim);
home.setMinimumSize(dim);
home.setMaximumSize(dim);
home.setSize(dim);
frame.add(menu);
frame.add(content);
frame.setVisible(true);
menu.setVisible(true);
content.setVisible(true);
}
}
答案 0 :(得分:2)
我没有使用任何布局,
是的。默认情况下,JPanel使用FlowLayout。
但是我尝试使用FlowLayout修复该问题,但并没有真正改变。
这是因为默认的FlowLayout在添加到面板的任何组件周围使用了5个像素的间隙。
您应该使用:
menu.setLayout( new FlowLayout(...) );
阅读FlowLayout API中适合的构造函数,该函数允许您将0用于水平和/或垂直间隙。
frame.add(menu);
frame.add(content);
此外,默认情况下,框架的内容窗格使用BorderLayout,因此您应该使用:
frame.add(menu, BorderLayout.PAGE_START);
frame.add(content, BorderLayout.CENTER);
您不应尝试控制按钮的大小:
//home.setPreferredSize(dim);
//home.setMinimumSize(dim);
//home.setMaximumSize(dim);
只需设置按钮的文本或向按钮添加图标,按钮将确定其自己的首选大小。
此外,您确实应该将“菜单”面板称为“工具栏”面板。 Swing已经支持菜单,并且有一种特殊的方法可以向框架添加菜单栏。阅读How to Use Menus上Swing教程中的部分,以获取更多信息。