加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 在这个游戏中使用哪个布局管理器?

发布时间:2020-12-15 04:37:22 所属栏目:Java 来源:网络整理
导读:在这个游戏中使用哪个布局管理器? 解决方法 恕我直言,使用布局和组件不是一个很好的解决方案,个人而言,我倾向于自定义绘画解决方案. 从一件作品的基本概念开始,它需要知道它的位置,它的大小,它的颜色,能够自己画画并且可能是可重新定位的,类似…… public i
在这个游戏中使用哪个布局管理器?

解决方法

恕我直言,使用布局和组件不是一个很好的解决方案,个人而言,我倾向于自定义绘画解决方案.

从一件作品的基本概念开始,它需要知道它的位置,它的大小,它的颜色,能够自己画画并且可能是可重新定位的,类似……

public interface Piece {
    public Rectangle getBounds();
    public Color getColor();
    public void setLocation(Point point);
    public void paint(Graphics2D g2d);
}

从这里,你可以定义你需要的形状,例如……

public abstract class AbstractPiece implements Piece {

    private Rectangle bounds;
    private Color color;

    @Override
    public void setLocation(Point point) {
        bounds.setLocation(point);
    }

    @Override
    public Rectangle getBounds() {
        return bounds;
    }

    @Override
    public Color getColor() {
        return color;
    }

    public void setBounds(Rectangle bounds) {
        this.bounds = bounds;
    }

    public void setColor(Color color) {
        this.color = color;
    }

}

public class Square extends AbstractPiece {

    public Square(Point location,int size,Color color) {
        Rectangle bounds = new Rectangle();
        bounds.setLocation(location);
        bounds.setSize(size,size);
        setBounds(bounds);
        setColor(color);
    }

    @Override
    public void paint(Graphics2D g2d) {
        g2d.setColor(getColor());
        g2d.fill(getBounds());
        g2d.setColor(Color.GRAY);
        Rectangle bounds = getBounds();
        g2d.drawLine(bounds.x + (bounds.width / 2),bounds.y,bounds.x + (bounds.width / 2),bounds.y + bounds.height);
        g2d.drawLine(bounds.x,bounds.y + (bounds.height / 2),bounds.x + bounds.width,bounds.y + (bounds.height / 2));
    }

}

这只是一个基本的方块,没什么特别的,但是,它是自包含的,易于创建和管理.您可以使用这个简单的模式创建您喜欢的任何形状组合,在一天结束时,您的电路板类将无关紧要,它只需要它占据的空间以及如何绘制它,说到哪个,你需要一些管理所有这些形状的容器类型……

public class PuzzelPane extends JPanel {

    private List<Piece> pieces;

    public PuzzelPane() {
        Dimension size = getPreferredSize();
        pieces = new ArrayList<>(25);
        Point location = new Point((size.width - 50) / 2,(size.width - 50) / 2);
        pieces.add(new Square(location,50,Color.BLUE));
    }

    @Override
    public Dimension getPreferredSize() {
        return new Dimension(200,200);
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        for (Piece piece : pieces) {
            Graphics2D g2d = (Graphics2D) g.create();
            piece.paint(g2d);
            g2d.dispose();
        }
    }

}

这是一个非常简单的概念,它有一个List来维护所有可用的形状,并简单地循环它以在paintComponent方法中绘制它们

结合this example和this example的想法,您现在可以拖动形状

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读