首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在JComponent中绘制JComponent?

如何在JComponent中绘制JComponent?
EN

Stack Overflow用户
提问于 2013-03-24 04:47:09
回答 2查看 1K关注 0票数 2

我对JComponent有个奇怪的问题。我正在尝试创建我自己的JComponent,因此我需要将我的JComponents组合在一起。

我想在我的JComponent JDial中绘制JButton:

代码语言:javascript
复制
public class JDial extends JComponent {
    private static final long serialVersionUID = 3364481508702147328L;

    public JDial() {        
        JButton b = new JButton("test");
        this.add(b);
    }
}   

但那什么也没画出来。更有趣的是,这个方法运行得很好:

代码语言:javascript
复制
public class JDial extends JPanel {
    private static final long serialVersionUID = 3364481508702147328L;

    public JDial() {        
        JButton b = new JButton("test");
        this.add(b);
    }
}

JPanel继承自JComponent,并在内部绘制JButton。JPanel是如何做到这一点的?

提前感谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-24 05:17:11

通常,当您想要通过覆盖paintComponent()方法进行自定义绘制时,可以扩展JComponent。

如果你只想添加一堆组件,那么你应该使用JPanel。

两者之间的区别在于,默认情况下,JPanel使用FlowLayout,因此它知道如何对添加到其中的任何组件进行布局。要使JComponent像JPanel一样,您需要设置布局管理器并添加自定义绘画来绘制背景。

票数 5
EN

Stack Overflow用户

发布于 2013-03-24 05:15:57

虽然JComponent也是从Container派生出来的,并且确实有所有代码来重新绘制适当大小和位置的子级,但它没有任何调整大小或布局的功能。而且您没有为您的JButton设置大小和位置,因此默认情况下假定大小为零。

不同的是,默认情况下,JPanel是用FlowLayout创建的,这个布局管理器主要根据组件计算的首选大小来设置组件大小。一般来说,直接使用JComponent作为容器是不常见的,请使用JPanel

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15591872

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档