使用Java Swing为Reversi GUI创建一个播放片段



我为Reversi创建了一个基本的GUI,使用JPanels在GridLayout中表示板。在演奏乐曲的那一刻,被点击的方块会改变颜色。我一直在尝试用圆形块来改变,而背景保持不变。

我找了很多,我似乎找不到一个方法来做到这一点?

——编辑——

构造函数代码。当一个片段被播放时,鼠标监听器只是更新板

Public boardGUI(int num){
    game = new reversiGame(num, false);
    Dimension boardSize = new Dimension(600, 600);
    numSquares = num; 
    layeredPane = new JLayeredPane();
    getContentPane().add(layeredPane);
    layeredPane.setPreferredSize(boardSize);
    layeredPane.addMouseListener(this);
    board = new JPanel();
    layeredPane.add(board, JLayeredPane.DEFAULT_LAYER);
    board.setLayout( new GridLayout(numSquares, numSquares) );
    board.setPreferredSize( boardSize );
    board.setBounds(0, 0, boardSize.width, boardSize.height);
    for (int i = 0; i < (numSquares * numSquares); i++) {
        JPanel square = new JPanel( new BorderLayout() );
        square.setBorder(BorderFactory.createLineBorder(Color.black));
        square.setBackground(Color.green);
        board.add( square );
        int row = (i/numSquares);
        int col = (i % numSquares);
        if ((row + 1 == numSquares / 2 & col + 1 == numSquares/2) || row == numSquares/2 & col == numSquares/2){
            square.setBackground(Color.white);
        }
        if ((row + 1 == numSquares / 2 & col == numSquares/2) || row == numSquares/2 & col + 1 == numSquares/2){
            square.setBackground(Color.black);
        }
     }  
}

updateboard函数

public void updateBoard(){
    int x = 0;
    int y = 0;
    ImageIcon black = new ImageIcon("Images/large-black-sphere.ico");
    ImageIcon white = new ImageIcon("Images/large-white-sphere.ico");
    for(int i = 0; i < numSquares; i++){
        for(int j = 0; j < numSquares; j++){
            x = i * (600/numSquares);
            y = j * (600/numSquares);
            Component c =  board.findComponentAt(x, y);
            GridType g = game.getGridType(i, j);
            if (g.equals(GridType.WHITE)){
                JPanel temp = (JPanel) board.getComponent( i + j );
                piece = new JLabel(white);
                temp.add(piece);
                //c.setBackground(Color.white);
            }
            else if(g.equals(GridType.BLACK)){
                JPanel temp = (JPanel)board.getComponent( i + j );
                piece = new JLabel(black);
                temp.add(piece);
                //c.setBackground(Color.black);
            }
            else{
                //c.setBackground(Color.GREEN);
            }

        }
    }
}

为游戏板上的每个网格添加JLabel。然后,您可以使用图标来表示反向部分。然后,当您想要更改反向部分时,您可以更改标签的图标。

棋盘的例子:我如何使我的自定义Swing组件可见?

…使用ImageIcon,虽然当我运行它时,它没有显示。

你可能需要调用repaint();以MVCGame中的ColorIcon为例

仔细看,您的updateBoard()方法似乎是向现有面板添加新标签,而没有删除旧标签或验证面板的布局。相反,应该就地更新Icon

相关内容

  • 没有找到相关文章

最新更新