如何将 JButton 拉伸到 JPanel 的全高
How does one stretch a JButton to the full height of a JPanel
为了总结我的问题,我正在为 Java 中的应用程序开发一个界面。我遇到了 运行 个以前从未遇到过的问题。
为了创建一种 "navigation bar",我在 JFrame 的顶部创建了一个薄的 JPanel。然后我想向它添加一个 JButton 来表示指向应用程序起始内容的 "home" 按钮。当我这样做并使 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);
}
}
I am not using any layout,
是的,你是。默认情况下,JPanel 使用 FlowLayout。
however i have tried to fix that problem using a FlowLayout but nothing really changed.
这是因为默认的 FlowLayout 在添加到面板的任何组件周围使用 5 像素的间隙。
您应该使用:
menu.setLayout( new FlowLayout(...) );
阅读 FlowLayout API 以找到允许您使用 0 的适当构造函数,用于水平 and/or 垂直间隙。
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);
只需设置按钮的文本或向按钮添加图标,按钮就会确定自己的首选大小。
此外,您确实应该将 "menu" 面板称为 "toolbar" 面板。 Swing 已经支持菜单,并且有一种特殊的方法可以将菜单栏添加到框架中。阅读 How to Use Menus 上的 Swing 教程部分了解更多信息。
为了总结我的问题,我正在为 Java 中的应用程序开发一个界面。我遇到了 运行 个以前从未遇到过的问题。 为了创建一种 "navigation bar",我在 JFrame 的顶部创建了一个薄的 JPanel。然后我想向它添加一个 JButton 来表示指向应用程序起始内容的 "home" 按钮。当我这样做并使 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);
}
}
I am not using any layout,
是的,你是。默认情况下,JPanel 使用 FlowLayout。
however i have tried to fix that problem using a FlowLayout but nothing really changed.
这是因为默认的 FlowLayout 在添加到面板的任何组件周围使用 5 像素的间隙。
您应该使用:
menu.setLayout( new FlowLayout(...) );
阅读 FlowLayout API 以找到允许您使用 0 的适当构造函数,用于水平 and/or 垂直间隙。
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);
只需设置按钮的文本或向按钮添加图标,按钮就会确定自己的首选大小。
此外,您确实应该将 "menu" 面板称为 "toolbar" 面板。 Swing 已经支持菜单,并且有一种特殊的方法可以将菜单栏添加到框架中。阅读 How to Use Menus 上的 Swing 教程部分了解更多信息。