这是一个菜鸟问题。 我们正在类里面学习 applet,我正在自己尝试一些东西。
下面是代码
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);
}
}
我无法理解其中的区别。为什么相同的代码在这种情况下有效,而在以前的情况下却无效?
谢谢。
最佳答案
重写 controls
类中的 public Dimension getPreferredSize()
(并返回一个 new Dimension
)。当将组件放在 WEST
中时,宽度将由 preferredSize 决定。如果您不覆盖 getPreferredSize
,首选大小将为 0。CENTER
将占据 WEST
之后的剩余空间, ect 被计算出来。第二种情况有效,因为它位于默认 BorderLayout
CENTER
关于java - 重写 paintComponent 以在面板上绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27065607/