如何将JButton拉伸到JPanel的整个高度

问题描述 投票:0回答:1

总结一下我的问题,我正在为Java应用程序开发一个接口。我遇到了一个我以前没有遇到过的问题。为了创建一种“导航栏”,我在JFrame的顶部创建了一个瘦JPanel。然后我想添加一个JButton来表示“home”按钮,它导致应用程序的起始内容。当我这样做并使按钮的宽度和高度等于面板的高度时,按钮与面板的顶部有一个大约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);

}

}

java swing jpanel jbutton
1个回答
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教程中的部分。

© www.soinside.com 2019 - 2024. All rights reserved.