如何在jpanel中添加视觉效果?

时间:2011-04-25 18:32:11

标签: java swing jpanel

我已经定义了一个名为Stone的类来为JPanel添加图形元素:

public class Stone {

    private int x, y;
    private Color color;

    private static final int radius = 18;

    Stone(Color color) {
        this.color = color;
    }

    public Stone(int x, int y, Color color) {
        this(color);
        this.x = x;
        this.y = y;
    }

    void draw(Graphics g) {
        g.setColor(color);

        g.fillOval(x - radius, y - radius, 2 * radius, 2 * radius);
    }

    void setX(int x) {
        this.x = x;
    }

    void setY(int y) {
        this.y = y;
    }
}

我想在JPanel上绘制它们。我是否必须在JPanel的paint方法中执行此操作,或者是否可以使用JPanel的add方法?

3 个答案:

答案 0 :(得分:9)

快速回答是您应该扩展JComponent(因为您要将其添加到JPanel)并覆盖paintComponent方法(因为您需要对对象进行一些自定义绘制)。

答案 1 :(得分:6)

最简单的方法是让你的Stone类扩展JComponent,将draw()重命名为paintComponent()并向你的JPanel添加Stone实例。

答案 2 :(得分:4)

这取决于你想在屏幕上用它做什么。正如其他人提到的那样,你可以从JComponent继承,如果用户希望以某种方式与它进行交互,这可能是一个很好的选择。

更轻量级的方法可能是实现Shape接口,或提供方法getShape()。

您可以使用我之前写的ShapeIcon,将其添加到JLabel: http://softsmithy.sourceforge.net/lib/docs/api/org/softsmithy/lib/swing/icon/ShapeIcon.html

然后将JLabel添加到JPanel。

但是,您可能不是要将单个Stone图标添加到单个JLabel,而是先绘制图像并在JPanel中显示?

如果您能告诉我们更多有关您的目标的信息,我们可以为您提供更好的帮助。