java - 如何在 Swing 中绘制相邻的矩形?

标签 java swing jpanel paintcomponent

我正在尝试在 Swing 中实现俄罗斯方 block ,因为我正在尝试绘制与每个矩形相邻的矩形,但第二个矩形并不与第一个矩形相邻。

此外,如果 getPreferredSize() 返回小于 50,50 的值,则屏幕上不会显示任何内容。 这段代码有什么问题以及如何绘制相邻的矩形。

public class Tetris extends JFrame
{

    public Tetris(String string)
    {
        super(string);
    }
    public static void main(String[] args)
    {
        Tetris tetris = new Tetris("Tetris");
        tetris.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel mainPanel = new JPanel();
        tetris.getContentPane().add(mainPanel);
        tetris.setVisible(true);
        tetris.setLocationRelativeTo(null);
        tetris.pack();
        tetris.setSize(500, 500);
        tetris.setResizable(false);
        tetris.paintBoard(mainPanel);
    }

    public void paintBoard(JPanel mainPanel)
    {
        Piece p1 = new Piece(10,10,50,50,Color.GREEN);
        Piece p2 = new Piece(60,10,50,50,Color.RED);
        mainPanel.add(p1);
        mainPanel.add(p2);
    }
}

public class Piece extends JComponent
{
    private int X = 0;
    private int Y = 0;
    private int H = 0;
    private int W = 0;
    private Color c;

    public Piece(int X, int Y, int W, int H, Color c)
    {
        this.X = X;
        this.Y = Y;
        this.W = W;
        this.H = H;
        this.c = c;
    }

    @Override
    public void paintComponent(Graphics g)
    {
        g.setColor(c);
        g.drawRect(X, Y, W, H);
        g.fillRect(X, Y, W, H);
        System.out.println("g.drawRect("+X+", "+Y+", "+W+", "+H+")");
    }

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

最佳答案

if getPreferredSize() returns anything less than 50,50 then nothing shows up in the screen

这是因为您为“红色”Piece 设置了 X 坐标 60,但组件的首选尺寸宽度为 50,因此组件被绘制到屏幕之外。

要添加组件,您只需在 0, 0 处绘制所有 Piece 组件,然后让布局管理器负责定位。除此之外,鉴于这是俄罗斯方 block 游戏,您应该考虑将所有组件绘制在单个组件上并使用 Swing Timer操纵碎片。

关于java - 如何在 Swing 中绘制相邻的矩形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15359274/

相关文章:

java - 比较多个 int 变量以查找对或三元组

java - 为什么从 Java 生成时, native Linux telnet 客户端的 "terminal speed"是 0,0(以及如何修复它)?

java - 正则表达式查找整数后面的字符串

java - 程序运行时什么都不显示

java - 数组中的 JSpinner

java - 我不明白为什么 JPanel 不刷新(我尝试过 revalidate(); 和 repaint();

java - JInternalFrame 不会出现在我的屏幕上

java - 将按钮放在 JPanel 中的图像顶部?

JAVA - 取消ThreadPoolExecutor正在运行的任务

java - 防止 JTable 单元格编辑器在验证失败时留下 "edit mode"