1

我正在尝试扩展一个类以最终制作一个自定义按钮。我在几个地方读到最好在层次结构上尽可能高地扩展(为了更好的多态性?),所以我试图扩展JComponent

import javax.swing.*;
import java.awt.*;

public class TestButton extends JComponent {
    private static final long serialVersionUID = 1L;
    
    
    public TestButton() {
        super();        
    }
    
}

调用它的代码是:

 b1 = new TestButton();     
 basePanel.add(b1,gbc);  // (gbc is GridBagConstraints object)

问题是,我JComponent的布局中没有显示。如果我将类扩展为JButton,则表明没有问题。这是怎么回事?

更新:

仅供参考,这是一个菜鸟概念问题,显然我在这里远非精通。

这里有一张图片来描述。唯一改变的是extends ______

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

正在发生的是一个没有背景的默认大小的块(黑色来自 JFrame)。

在此处输入图像描述

4

5 回答 5

4

和它的子类之间的主要区别之一JComponent是后者有 UI 委托,而JComponent没有。请注意,setBackground()“颜色仅在组件不透明时使用,并且仅由子类JComponentComponentUI实现使用。” 因此,您“必须重写paintComponent()以尊重此属性”。

于 2011-07-24T03:53:16.030 回答
3

您希望在JComponent应该在的地方看到什么?当你 extend 时JButton,你会得到它的所有图形,但是你创建了一个空组件,里面什么都没有。尝试在组件中放入一些东西(例如 aJLabel或类似的)

于 2011-07-24T03:09:18.723 回答
3

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

于 2011-07-24T03:10:59.347 回答
2

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

于 2011-07-24T03:36:05.400 回答
0

要么按原样使用 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);        
    }

}
于 2016-05-16T16:59:33.247 回答