我已经为Reversi创建了一个基本的GUI,使用JPanel来表示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);
}
}
}
updateBaord函数
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);
}
}
}
}
答案 0 :(得分:2)
将JLabel添加到游戏板上的每个网格。然后,您可以使用图标来表示reversi件。然后,当您想要更改反转片段时,您可以更改标签的图标。
这里的ChessBoard示例:How do I make my custom Swing component visible?显示了如何做到这一点。
答案 1 :(得分:2)
...使用
ImageIcon
,但是当我运行它时,它不显示。
您可能需要调用repaint()
; MVCGame
中的ColorIcon
就是一个例子。
仔细观察,您的updateBoard()
方法似乎在向现有面板添加新标签,而无需删除旧标签或验证面板的布局。相反,请更新Icon
。