java - 重写 paintComponent 以在面板上绘制

标签 java swing applet japplet

这是一个菜鸟问题。 我们正在类里面学习 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/

相关文章:

java - 打印Jpanel数据时出现问题

java - 如何在 Java 7 中使用 FRACTIONALMETRICS 呈现文本

java applet 中的外部 jar 出现 java.lang.NoClassDefFoundError

java - 使用第三方库部署小程序

java - java中的关联数组?

java - Java 中的多线程帮助

java - 使用两个 LocalDateTime 实例计算持续时间

java - Android 翻译的 Canvas 矩形碰撞

java - 选择特定 JComboBox 项时如何向 JPanel 添加附加 JButton

html - 为嵌入在 HTML 中的小程序设置策略