在JPanel中进行本地重新绘制

时间:2014-05-22 13:57:05

标签: java swing jpanel repaint

如何在JPanel上重绘本地字段?我正在写一个蛇游戏。当蛇移动到下一个单元格时,我们需要重新绘制已更改的单元格(不是整个JPanel)。 Cell可以抛出PropertyChangeEvent个对象,然后我可以调用repaint(x,y,h,w)方法。这是正确的方法吗?

1 个答案:

答案 0 :(得分:0)

首先,我假设您确实想要使用面板而不是表格,但我认为您可能需要查看JTable组件,因为它可能更适合您的应用程序。 / p>

您的问题的答案是您不应该明确要求对单元格进行重新绘制。相反,每个单元格应表示为JComponent子类的实例,其中包含如下代码:

public class SnakeGameCell extends JComponent {

    private boolean snakePresent;

    public boolean isSnakePresent() {
        return snakePresent;
    }

    public void setSnakePresent(boolean present) {
        if (snakePresent != present) {
            snakePresent = present;
            repaint();
        }
    }

}

换句话说,每个组件应该负责知道什么时候应该重新绘制,并在适当的时候实现。很难找到适合重新调用()以及#34;外部"的情况。换句话说,不要让控制器类负责启动重绘 - 让需要重新绘制的东西(组件)自行决定。