paintComponent覆盖在面板上绘制

时间:2014-11-21 16:08:57

标签: java swing applet japplet

这是一个菜鸟问题。 我们正在课堂上教小工具,而我正在尝试自己的东西。

以下是代码

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


class controls extends JPanel{

@Override public void paintComponent(Graphics g) {
    g.drawOval(50, 50, 50, 50); // <-- draws an oval on the panel
}

}

 public class test extends JApplet{
public void init(){
    final JPanel stage = new JPanel();
    final JPanel controlPanel = new controls();
    final JPanel banner = new JPanel();
    final JLabel name = new JLabel("Test", JLabel.CENTER);
    this.setLayout(new BorderLayout());
    banner.setBackground(Color.CYAN);
    banner.add(name);
    this.add(controlPanel, BorderLayout.WEST);
    this.add(banner, BorderLayout.NORTH);
}
}

据我了解,不需要显式调用paintComponent()。 控件类在单独使用时效果很好。

我的意思是以下代码可以使用。

public class test extends JApplet{
public void init(){
    JPanel controlPanel = new controls();
    this.add(controlPanel);
}
}

我无法理解其中的差别。为什么相同的代码在这种情况下有效,而不是在之前的?

谢谢。

1 个答案:

答案 0 :(得分:4)

public Dimension getPreferredSize()课程中覆盖new Dimension(并返回controls)。将组件放入WEST时,宽度将由preferredSize确定。如果您不覆盖getPreferredSize,则首选大小将为0. CENTER将在计算WEST之后占用剩余空间。第二种情况有效,因为它位于默认CENTER

BorderLayout