gpt4 book ai didi

java - 在 JPanel 中创建可见网格

转载 作者:行者123 更新时间:2023-12-01 18:32:46 27 4
gpt4 key购买 nike

我正在尝试做什么

我想创建一个 API(个人的),允许我输入尺寸(例如 10x10),它会创建一个 10 乘 10 平方的可见网格,并添加能够更改填充的“功能”通过方法调用的任何正方形。不尝试使用鼠标监听器或任何类型的监听器

我的思考过程是这样的:让保存网格的主 JPanel 递归地添加“盒子”对象,并使用 array 位置引用每个对象。我的问题不是主要的 JPanel,我很容易就搞定了。我的问题是它添加的对象。我不知道这应该是什么类型的组件。我尝试使用 JPanel 但无法让任何内容可见。此外,“网格”外观也不存在。

我猜我将不得不使用 swing.GraphicsGraphics2D 但我在网上找到的每个示例都不适合我。寻找有关使用Graphics的建议,或者如果有更好的方法来获得我想要的东西,我很乐意尝试一下。

最佳答案

  1. 有一个 MainPanel 类,它接受尺寸参数并根据指定的尺寸将其布局设置为 GridLayout

    public class MainPanel extends JPanel {
    public MainPanel(int rows, int cols) {
    setLayout(new GridLayout(rows, cols));
    }
    }
  2. 创建一个具有 draw() 方法的接口(interface)

    public interface Drawable {
    void draw(Graphics g);
    }
  3. 创建一个具有 Drawable 属性的自定义面板,您将在其中调用它的绘制方法

    public class DrawPanel extends JPanel {
    private Drawable drawable;

    public DrawPanel() {}

    public DrawPanel(Drawable drawable) {
    this.drawable = drawable;
    }

    public void setDrawable(Drawable drawable) {
    this.drawable = drawable;
    repaint();
    }

    @Override
    protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    if (drawable != null) {
    drawable.draw(g);
    }
    }
    }
  4. MainPanel 类中创建 DrawPanels 的二维数组,如果需要,您可以通过索引访问它们

    public class MainPanel extends JPanel {
    private DrawPanel[][] panels;
    public MainPanel(int rows, int cols) {
    setLayout(new GridLayout(rows, cols));
    panels = new DrawPanel[rows][cols];
    }
    }
  5. 新的DrawPanel填充数组并将它们添加到MainPanel

    for (int i = 0; i < rows; i++) {
    for (int j = 0; j < cols; j++) {
    DrawPanel panel = new DrawPanel();
    panels[i][j] = panel;
    MainPanel.this.add(panel);
    }
    }
  6. 使用您想要的任何/多少个实现来实现 Drawable 接口(interface)。喜欢

    public class Ball implements Drawable {
    private int x, y;
    private JPanel surface;
    public Ball(int x, int y, JPanel surface) {
    this.x = x;
    this.y = y;
    this.surface = surface;
    }

    @Override
    public void draw(Graphics g) {
    g.fillOval(x, y, sirface.getWidth(), surface.getHeight());
    }
    }
  7. 将可绘制对象添加到面板

    JPanel panel = panels[3][4];
    panel.setDrawable(new Ball(0, 0, panel));
  8. 您可以根据需要制作任意多种不同的 Drawable 实现,并且每个面板都可以绘制不同的对象。

    public class Midget implements Drawable {
    @Override
    public void draw(Graphics g) {
    // draw midget
    }
    }
    ....
    panels[5][5].setDrawable(new Midget());

关于java - 在 JPanel 中创建可见网格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23370914/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com