java - 使用paintComponent()和继承在“图层”中绘画

原文 标签 java oop inheritance paintcomponent

我试图创建两个组件,每个组件都有一个paintComponent()方法-目标是父对象将绘制默认图稿,然后子对象可以在其上绘制。例如创建扑克牌:您有一个父Card类来绘制默认纸牌,然后是特定于套件的类,这些类扩展了Card并在其上绘制其详细信息。

这是我要完成的工作的图表:


这是我正在使用的代码。我的具体问题是:绘制组件时-如果子类没有paintComponent方法-则绘制父作品。但是,如果我对孩子实施paintComponent方法,则不会吸引父母,只会吸引孩子。

这是我的代码:

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

abstract public class Tile extends JPanel {

    public static final int DEFAULT_WIDTH = 100;
    public static final int DEFAULT_HEIGHT = 100;

    @Override public void paintComponent(Graphics g){

        //Set Size
        setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);

        Graphics2D g2 = (Graphics2D)g;

        //Draw default art


    }
    @Override public Dimension getMinimumSize()
    { return new Dimension(DEFAULT_WIDTH,DEFAULT_HEIGHT); }

    @Override public Dimension getPreferredSize()
    { return getMinimumSize(); }

    //.....

}




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

public class CharacterTile extends Tile {

    protected char symbol;

    public CharacterTile(char symbol){
        this.symbol = symbol;
    }
    @Override public void paintComponent(Graphics g){
        super.paintComponents(g);
        Graphics2D g2 = (Graphics2D)g;
        //Draw details
    }

    //.....
}

最佳答案

这不是继承的好用法。您应该具有以下内容:

Card
{
    Art front;
    Art back;
    paintComponent()
    {
        back.paintComponent();
        front.paintComponent();
    }
}


您甚至可以拥有一个List层;并绘制您需要的所有图层。

子类用于将代码拆分为较小的问题。为了重用代码,您应该使用多态+对象组合。

关于java - 使用paintComponent()和继承在“图层”中绘画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11377150/

相关文章:

C#:从其基类的实例返回继承的类(通用列表)

c++ - 如何在C++中实现可插拔接口(interface)

java - 将照片发布到页面时出现意外错误

java - 我应该使用什么文件名测试我的应用程序?

java - 为什么 "int i = (byte) + (char) - (int) + (long) - 1"是 1?

javascript - JavaScript中的 getter 和 setter

java - 如果Class仅具有getter和setter,为什么Java中的实例变量应该是私有(private)的

javascript - Javascript-如何创建元素,将其添加到数组中并显示它

c++ - 奇怪的行为C++纯虚函数

java - 如何扩展Spring Boot的DataSourceAutoConfiguration