Java Swing-为什么JComponent不会显示?

Java Swing-为什么JComponent不会显示?,java,swing,jbutton,extend,jcomponent,Java,Swing,Jbutton,Extend,Jcomponent,我正在尝试扩展一个类,最终生成一个自定义按钮。我在几个地方读到,为了获得更好的多态性,最好将继承权扩展到尽可能高的位置,因此我尝试扩展JComponent: 调用这个的代码是: b1 = new TestButton(); basePanel.add(b1,gbc); // (gbc is GridBagConstraints object) 问题是,我的JComponent没有显示在我的布局中。如果我将类扩展为JButton,则不会出现问题。怎么回事 更新: 仅供参考,这是一

我正在尝试扩展一个类,最终生成一个自定义按钮。我在几个地方读到,为了获得更好的多态性,最好将继承权扩展到尽可能高的位置,因此我尝试扩展JComponent:

调用这个的代码是:

 b1 = new TestButton();     
 basePanel.add(b1,gbc);  // (gbc is GridBagConstraints object)
问题是,我的JComponent没有显示在我的布局中。如果我将类扩展为JButton,则不会出现问题。怎么回事

更新:

仅供参考,这是一个noob概念性问题,显然我还远远不够精通

这里有一张图片可以描述。唯一改变的是扩展

应该是一个紫色的填充块,与底部的黄色块高度相同

正在发生的是一个默认大小的块,它没有背景——黑色来自JFrame


在JComponent应该是什么的地方,您希望看到什么?当您扩展JButton时,您将获得它的所有图形,但您创建了一个空组件,其中没有任何内容。尝试在组件中放置一些东西,例如JLabel或类似的东西,您希望在JComponent应该位于的位置看到什么?当您扩展JButton时,您将获得它的所有图形,但您创建了一个空组件,其中没有任何内容。尝试在组件中添加一些东西,如JLabel或类似的

如果您想要JButton的功能,您仍然需要扩展JButton。否则,每个人都可以扩展对象并期待一切。

如果您想要JButton的功能,您仍然需要扩展JButton。否则,每个人都可以扩展对象并期望得到一切。

它是一个空白组件,基本上是一个模板。它没有属性。您必须通过覆盖paintComponent方法添加自己的图形元素,然后通过覆盖update方法添加逻辑元素。

它是一个空白组件,基本上是一个模板。它没有属性。您必须通过重写paintComponent方法来添加自己的图形元素,然后通过重写update方法来添加逻辑元素。

JComponent及其子类之间的主要区别之一是后者有UI委托,而JComponent没有。请注意,仅当组件不透明且仅由JComponent或ComponentUI实现的子类使用颜色。因此,您必须重写paintComponent以遵守此属性。

JComponent及其子类之间的主要区别之一是后者具有UI委托,而JComponent没有。请注意,仅当组件不透明且仅由JComponent或ComponentUI实现的子类使用颜色。因此,您必须重写paintComponent以遵守此属性。

或者按原样使用JButton:

 JButton b1 = new JButton("Enter JButton text here");     
 basePanel.add(b1,gbc); 
或者,如果您希望更改某些属性并根据自己的首选项对其进行自定义,请扩展JButton类:

public class TestButton extends JButton {
    private static final long serialVersionUID = 1L;


    public TestButton(String buttonText) 
    {
        super(buttonText);        
    }

}

按原样使用JButton:

 JButton b1 = new JButton("Enter JButton text here");     
 basePanel.add(b1,gbc); 
或者,如果您希望更改某些属性并根据自己的首选项对其进行自定义,请扩展JButton类:

public class TestButton extends JButton {
    private static final long serialVersionUID = 1L;


    public TestButton(String buttonText) 
    {
        super(buttonText);        
    }

}

是调试此类问题时使用的好工具。是调试类似问题时使用的一个很好的工具。我所期望的是一个类似于JPanel的封闭区域,在那里我可以设置背景并将内容粘贴到其中,但显然情况并非如此:感谢您的提示,对我来说听起来很好-我将在几分钟后点击代码。好的,插入一个按钮,但预期结果不难解释。JComponent是否会自动填充gridbag单元格?约束设置为两者都有。我所期望的是一个类似于JPanel的封闭区域,在那里我可以设置背景并将内容粘贴到其中,但显然情况并非如此:感谢您的提示,听起来不错-我会在几分钟后点击代码。好的,插入一个按钮,但预期结果不难解释。JComponent是否会自动填充gridbag单元格?约束设置为两者。我不一定要JButton,我只想要一个背景块来填充我的布局单元格…JComponent已经有了一个setBackground方法…我不一定要JButton,我只想要一个背景块来填充我的布局单元格…JComponent已经有了一个setBackground方法…啊,好的。那么JComponent是否会自动填充gridbag单元格。。。如果约束同时设置为两个。是什么使一个对象具有这种填充行为?同意垃圾神的说法——建议在Swing中覆盖更新是错误的-1啊,好的。那么JComponent是否会自动填充gridbag单元格。。。如果约束同时设置为两个。是什么使一个对象具有这种填充行为?同意垃圾神的说法——建议在Swing中覆盖更新是错误的-1+1欢呼这是一半的秘密,很清楚。有什么原因它没有填满它的gridbag单元格吗?对不起,我不是GridBagLayout的人,但我在猜你选择的L&F的PanelUI中有什么东西。安可能会有所帮助。+1干杯这是一半的秘密,奎 没问题。有什么原因它没有填满它的gridbag单元格吗?对不起,我不是GridBagLayout的人,但我猜你选择的L&F的PanelUI中有什么东西。An可能会有所帮助。