我对JComponent有一些奇怪的问题。我正在尝试创建自己的JComponent,因此我需要一起组合我的JComponents。
我想在我的JComponent JDial中绘制JButton:
public class JDial extends JComponent {
private static final long serialVersionUID = 3364481508702147328L;
public JDial() {
JButton b = new JButton("test");
this.add(b);
}
}
但那只是什么都没画。更有趣的是,这个效果很好:
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如何做到这一点?
提前致谢
答案 0 :(得分:4)
通常,当您想通过覆盖paintComponent()方法进行自定义绘制时,可以扩展JComponent。
如果您只想添加一堆组件,那么您应该使用JPanel。
两者之间的区别在于默认情况下JPanel使用FlowLayout,因此它知道如何布局添加到其中的任何组件。要使JComponent像JPanel一样,您需要设置布局管理器并添加自定义绘画来绘制背景。
答案 1 :(得分:1)
虽然JComponent也来自Container
并且确实拥有重新映射正确大小和定位子项的所有代码,但它没有任何调整大小或布局它们的能力。并且您没有为JButton
设置大小和位置,因此默认情况下假设为零。
不同的是,JPanel
默认情况下使用FlowLayout
创建,此布局管理器将主要根据计算的首选大小来设置组件大小。通常,直接使用JComponent
作为容器是不常见的,请使用JPanel
。