这样的棋盘中,如何实现棋盘的格子随鼠标移动而高亮public ChessGameFrame(int width, int height) { setTitle("斗兽棋"); //设置标题 this.WIDTH = width; this.HEIGTH = height; this.ONE_CHESS_SIZE = (HEIGTH * 4 / 5) / 9; setSize(WIDTH, HEIGTH); setLocationRelativeTo(null); // Center the window. setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); //设置程序关闭按键,如果点击右上方的叉就游戏全部关闭了 setLayout(null); addRestart(); addGiveUp(); addUndo(); addChessboard(); addLabel(); addLoadButton(); addSave(); addAImode(); addAImodeGreedy(); addBackground(); }public CellComponent(Color background, Point location, int size) { setLayout(new GridLayout(1,1)); setLocation(location); setSize(size, size); this.background = background; } @Override protected void paintComponent(Graphics g) { super.paintComponents(g); g.setColor(background); g.fillRect(1, 1, this.getWidth()-1, this.getHeight()-1); } }
时间: 2024-01-07 14:05:46 浏览: 64
您可以在棋盘的每个格子上添加一个 MouseListener,当鼠标移入时,修改该格子的背景色为高亮色,当鼠标移出时,修改背景色为原来的颜色。具体实现可以参考下面的代码:
```
public class CellComponent extends JPanel {
private Color background;
private boolean isHighlighted = false;
private Point location;
private int size;
public CellComponent(Color background, Point location, int size) {
setLayout(new GridLayout(1, 1));
setLocation(location);
setSize(size, size);
this.background = background;
addMouseListener(new MouseAdapter() {
@Override
public void mouseEntered(MouseEvent e) {
setBackground(getHighlightColor());
isHighlighted = true;
}
@Override
public void mouseExited(MouseEvent e) {
setBackground(background);
isHighlighted = false;
}
});
}
private Color getHighlightColor() {
float[] hsbVals = new float[3];
Color.RGBtoHSB(background.getRed(), background.getGreen(), background.getBlue(), hsbVals);
hsbVals[1] = Math.min(1.0f, hsbVals[1] * 2);
hsbVals[2] = Math.min(1.0f, hsbVals[2] * 1.5f);
return Color.getHSBColor(hsbVals[0], hsbVals[1], hsbVals[2]);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(background);
g.fillRect(1, 1, this.getWidth() - 1, this.getHeight() - 1);
}
public boolean isHighlighted() {
return isHighlighted;
}
public void setBackground(Color color) {
this.background = color;
super.setBackground(color);
}
}
```
这里需要注意的是,为了避免高亮色过于鲜艳,我们可以在原来的颜色基础上稍微调整一下饱和度和亮度,使得高亮色更加柔和。
阅读全文
相关推荐
![-](https://img-home.csdnimg.cn/images/20241231045021.png)
![-](https://img-home.csdnimg.cn/images/20241231044833.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)