Java JButton未出现在JPanel上

Java JButton未出现在JPanel上,java,swing,jpanel,Java,Swing,Jpanel,我一直在尝试学习如何在java中使用布局管理,我有以下代码尝试添加类“StartButton”,StartButton只是一个扩展JButton的类 当我运行代码时,JFrame被正确加载,JPanel被创建,我还向layoutItems()添加了一个print,以确保函数被调用 这是我的JPannel代码 import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Gri

我一直在尝试学习如何在java中使用布局管理,我有以下代码尝试添加类“StartButton”,StartButton只是一个扩展JButton的类

当我运行代码时,JFrame被正确加载,JPanel被创建,我还向layoutItems()添加了一个print,以确保函数被调用

这是我的JPannel代码

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;

import javax.swing.JPanel;

public class menuPanel extends JPanel {

    private static final long serialVersionUID = 1L;

    private static final Color BG_COLOR = new Color(0xfaf8ef);


    private startButton startbutton;

    public menuPanel(){
        this.setOpaque(false);
        this.setPreferredSize(new Dimension(300, 400));
        this.setBackground(new Color(107, 106, 104));
        this.setVisible(true);
        setLayout(new GridBagLayout());

        startbutton = new startButton();

        layoutItems();
    }

    @Override
    public void paint(Graphics g) {
        super.paint(g);
        g.setColor(BG_COLOR);
        g.fillRect(0, 0, this.getSize().width, this.getSize().height);
    }


    public void layoutItems(){
        GridBagConstraints c = new GridBagConstraints();
        System.out.println("lol");
        c.weightx = 0.25;
        c.weighty = 0.175;
        c.gridwidth = 2;
        c.gridx = 1;
        c.gridy = 6;
        this.add(startbutton, c);
    }
}

忽略对上述类调用
pack()
的建议,因为它不适用于JPanels。相反,不要设置JPanel的大小或首选大小——让组件本身和布局管理器来设置。然后将所有项目添加到JFrame,在添加所有项目后对其调用
pack()
,然后按顺序对其调用
setVisible(true)

哦,您需要将startbutton类名更改为startbutton,因为Java类名应该以大写字母开头,并且除了常量之外,所有标识符都应该使用驼峰大小写名称


如果您在尝试这些建议后仍处于停滞状态,那么考虑创建和发布您的评论,测试,并可能修复。<> >代码> >油漆>代码>而不是<代码> PruttCuffs/Cuff>。p>

@Override
public void paintComponent(Graphics g) {
    super.paintComponent(g);
    ...
}

事实上,覆盖
paintComponent
是不必要的,因为
setBackground(BG\u COLOR)
会产生相同的结果

这可能是因为在添加组件之前手动将面板设置为可见。在添加按钮1)
public void paint(Graphics g){super.paint(g);
应该是
public void paintComponent(Graphics g){super.paintComponent(g);
对于任何
JComponent
.2)为了更快地获得更好的帮助,发布一个(最简单的完整且可验证的示例)。不要覆盖任何绘制方法。JPanel将根据setBackground(…)方法中指定的颜色绘制面板的背景。