0

我正在用java编写一个必须在applet中显示的国际象棋程序。我目前在填充棋子数组时遇到问题。目前这是在我的 JApplet 的 paint() 方法中完成的,我知道这是错误的,因为可以多次调用 paint。我已经尝试创建数组并将其填充到我的初始化方法中,但这根本不起作用。任何帮助,将不胜感激。

public class DrawChessBoard extends JApplet
        implements MouseListener, MouseMotionListener {

    ChessPiece myPiece;
    ImageIcon square;
    ImageObserver observer;
    ChessBoard gameBoard;
    boolean isMouseDragging = false;
    int size; //square dimensions   

    public void initialize() {
        setBackground(Color.white);
        Image bSquare = square.getImage();
        size = bSquare.getWidth(observer);
        addMouseListener(this);
        addMouseMotionListener(this);
    }

    public void paint(Graphics h) {
        Graphics2D g = (Graphics2D) h;
        //System.out.println("Am I being called more than once?");
        gameBoard = new ChessBoard(8);
        gameBoard.start();
        gameBoard.paintBoard(g);
        gameBoard.paintComponent(g);
    }
}
4

3 回答 3

3

不要在paint方法中做程序逻辑——句号。这在很多方面都是错误的。该代码不仅会被多次调用并且不受您的控制,而且还会使程序图形变得缓慢。绘画应该在 JPanel 或其他 JComponent 的 paintComponent 方法中完成,并且该方法应该只关注绘画本身。

顺便问一下,你的 init 方法在哪里?这就是大部分代码应该去的地方。

这是在 JPanel 上完成的国际象棋应用程序示例:does-adding-a-jlabel-to-a-jpanel-hide-the-jpanel。因为它在 JPanel 上,所以可以很容易地放在 JApplet 的 contentPane 中并显示在 applet 中。

于 2011-11-05T03:02:13.530 回答
2

您必须将游戏规则与应用程序的可视化部分分开。

阅读有关 Model-View-Presenter 或 Model-View-Controller 设计模式的信息。它会帮助你。

于 2011-11-05T03:04:50.570 回答
0

尝试模型-视图-控制器设计模式。在该模式中,程序逻辑在控制器部分执行,但您在视图部分执行。有龙!

于 2011-11-05T10:04:36.613 回答