该游戏使用哪个布局管理器?

2024-01-16

该游戏使用哪个布局管理器?


恕我直言,使用布局和组件并不是解决您问题的好方法,就我个人而言,我倾向于使用自定义绘画解决方案。

从一件作品的基本概念开始,它需要知道它的位置,它的大小,它的颜色,能够绘制自己并且可能是可重新定位的,比如......

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 method

将其与来自的想法结合起来这个例子 https://stackoverflow.com/questions/33402446/how-to-click-and-drag-something-without-it-deselecting/33403429#33403429 and 这个例子 https://stackoverflow.com/questions/33163298/dragging-image-using-mousedrag-method/33163542#33163542现在您可以拖动形状

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

该游戏使用哪个布局管理器? 的相关文章

随机推荐

  • 将图像添加到 Tkinter Entry

    使用 tkinter 我尝试在条目小部件的边框内显示图像 我尝试在谷歌中搜索 但没有成功 有人知道该怎么做吗 没有任何功能或属性允许图像位于 Entry 小部件的边界内 但是 您可以很容易地模拟它 方法是将图像和条目小部件放入框架内 从条目
  • cython 中融合类型的替代品

    我正在努力使用 python C api 将最初用 C 编写的 python 模块重写为 Cython 该模块还使用 NumPy 该项目的一个主要挑战是保持模块当前的速度 并且它应该适用于所有 Numpy 数据类型 我正在考虑使用融合数据类
  • wint_t 总是至少与 wchar_t 一样大吗? unsigned short 如何满足 wint_t 的要求?

    似乎每个人都假设wint t至少与wchar t 然而C标准允许wchar trange 的值不直接对应于扩展字符集中的任何字符 价值WCHAR MIN and WCHAR MAX不一定对应于扩展字符集的成员 and wchar t 它是一
  • 在网格视图中为复选框列生成新列

    我使用数据表作为网格视图的数据源 DataTable table new DataTable table Columns Add Dosage typeof int table Columns Add Drug typeof string
  • java.lang.OutOfMemoryError:Java堆空间已满100000条记录

    尝试使用以下代码编写Excel文件 public static void main String args XSSFWorkbook workbook new XSSFWorkbook XSSFSheet sheet workbook cr
  • 如何通过 Web.config 或 C# 将所有内容重定向到 https://www。网站的版本?

    我有一个托管在 GoDaddy 上的 ASP NET 网站 我需要将每个请求重定向 301 到https www example com whatever https www example com whatever 例如 http exa
  • 在Android中解析巨大的JSON对象?

    Android中如何解析巨大的JSON文件 当我解析这样的文件时 我在日志上看到类似这样的内容 04 05 15 55 46 490 DEBUG dalvikvm 3847 GC freed 12159 objects 557744 byt
  • Tomcat 6 与 servlet 3 规范

    与此相反文档 http tomcat apache org whichversion html Tomcat 6 可以使用 Servlet 规范 3 吗 是否可以将 servlet 3 规范与 tomcat 6 一起使用 我怀疑这是一个实用
  • 如何创建“显示更多”按钮并指定最初可以显示多少行文本

    我正在寻找一种方法在我的响应式网站上创建滑出 显示更多 功能 该功能在两行的一个段落 我之前已经通过静态网站实现了这一点 通过对容器应用设定的高度并使用overflow hidden 然后对容器的高度进行动画处理 但为了响应 容器会在不同的
  • sorl 缩略图 + django 生产中的问题

    我正在 Django 中使用 sorl 缩略图 在我的本地设置中它工作正常 但在生产中未制作缩略图 我的代码如下所示 load thumbnail thumbnail up image 32x32 crop center as im img
  • 您可以从 CakePHP 中的视图调用控制器函数吗?

    我想从视图调用控制器函数 这在 Cake PHP 中可能吗 可以通过请求操作方法 http book cakephp org 2 0 en views html requesting elements from a plugin 但不建议这
  • 使用peewee访问远程MySQL数据库

    我正在尝试使用 peewee 连接到 Amazon RDS 上的 MySQL 数据库 但无法使其工作 我是数据库新手 所以我可能在做一些愚蠢的事情 但这就是我正在尝试的 import peewee as pw myDB pw MySQLDa
  • Python质数检查[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我写了这个非常简单的素数检查 pri
  • 为什么子线程无法访问flask_login中的current_user变量?

    我正在写一个烧瓶应用我正在尝试插入一个多线程实现对于某些服务器相关的功能 我注意到这种奇怪的行为 所以我想了解为什么会发生这种情况以及如何解决它 我有以下代码 from flask login import current user log
  • 布尔数组转整数

    python 中是否有任何内置函数可以转换 bool 数组 表示字节中的位 如下所示 p True True True False True False False True 像这样的字节数组 bp byteArray 233 我知道哦 n
  • 动态添加表单字段行 - cakePHP

    我有一个发票表和一个invoice item 表 每个发票有许多发票项 创建发票时 系统会向用户显示一个包含发票表单字段的表单以及包含发票项表单字段的行 我想要做的是有一个 添加新项目 链接 可以动态 jQuery AJAX 添加新的项目字
  • 对 php.ini 的更改未反映在 PHP 的 phpinfo() 中

    我只是无法在本地主机设置或相关的设置上更改 php info 值php我的管理员 https en wikipedia org wiki PhpMyAdmin最大文件大小 所以我找到了 PHP 文件phpinfo https www php
  • 如何对 Laravel Eloquent ORM 对象进行排序?

    例如 我们有一个包含 3 个字段的模型航班 created at 航班创建的时间 name 航班名称 分数 航班的分数 所以我这样写 flights App Flight orderBy created at 我得到一些 flight排序对
  • VBA 下标超出范围 - 错误 9

    有人可以帮我解决这个代码吗 我得到了下标超出范围 error 创建工作表 之后的行在调试器中以黄色突出显示 Validation of year If TextBox Year Value Format TextBox Year Value
  • 该游戏使用哪个布局管理器?

    该游戏使用哪个布局管理器 恕我直言 使用布局和组件并不是解决您问题的好方法 就我个人而言 我倾向于使用自定义绘画解决方案 从一件作品的基本概念开始 它需要知道它的位置 它的大小 它的颜色 能够绘制自己并且可能是可重新定位的 比如 publi