liquidPanel = new JPanel() { @Override protected void paintComponent(Graphics g) {}是什么意思,怎么用
时间: 2023-05-21 16:07:07 浏览: 103
这段代码是创建一个 JPanel 对象,并重写了其 paintComponent 方法,该方法用于绘制 JPanel 上的图形,但是在这里该方法没有实现任何绘制操作。这段代码的目的是创建一个不需要绘制图形的 JPanel 对象,通常用于容纳其它组件或实现布局等功能。可以将该对象添加到 JFrame 窗口或其它容器中,例如:
```java
JFrame frame = new JFrame("Demo");
frame.add(new JPanel() {
@Override
protected void paintComponent(Graphics g) {}
});
```
这样就可以创建一个不需要绘制任何图形的 JPanel 并添加到 JFrame 中。
相关问题
怎么在Cellcomponent中实现格子随鼠标移动而高亮,且不与selected相冲突public class AnimalComponent extends ChessComponent { private PlayerColor owner; private boolean selected; /* private ChessboardPoint position; public void setPosition(ChessboardPoint position) { this.position = position; } public ChessboardPoint getPosition(){ return position; } */ private static int bluesEaten = 0;//记录被吃掉的蓝色动物数量 public static void setBluesEaten(int bluesEaten){AnimalComponent.bluesEaten = bluesEaten; System.out.println("蓝棋被吃数量" + AnimalComponent.bluesEaten); } public static int getBluesEaten(){return bluesEaten;} private static int redsEaten = 0;//记录被吃掉的红色动物数量 public static void setRedsEaten(int redsEaten){AnimalComponent.redsEaten = redsEaten; System.out.println("红棋被吃数量" + AnimalComponent.redsEaten); } public static int getRedsEaten(){return redsEaten;} public AnimalComponent(PlayerColor owner, int size) { super(owner , size); this.owner = owner; this.selected = false; setSize(size/2, size/2); setLocation(0,0); setVisible(true); } public boolean isSelected() { return selected; } public void setSelected(boolean selected) { this.selected = selected; } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2 = (Graphics2D) g; g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); Font font = new Font("楷体", Font.PLAIN, getWidth() / 2); g2.setFont(font); g2.setColor(owner.getColor()); g2.drawString(" ", getWidth() / 4, getHeight() * 5 / 8); // FIXME: Use library to find the correct offset. if (isSelected()) { // Highlights the model if selected. g.setColor(Color.RED); g.drawOval(0, 0, getWidth() , getHeight()); } } }public class CellComponent extends JPanel { private Color background; 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); } }
你可以在CellComponent类中添加一个MouseListener,然后在鼠标进入和离开的事件中修改组件的背景颜色来实现高亮效果。具体代码如下:
```
public class CellComponent extends JPanel {
private Color background;
private Color hoverColor;
private boolean isHovered;
public CellComponent(Color background, Point location, int size) {
setLayout(new GridLayout(1,1));
setLocation(location);
setSize(size, size);
this.background = background;
this.hoverColor = new Color(255, 255, 0, 100); // 设置高亮颜色为半透明黄色
addMouseListener(new MouseAdapter() {
@Override
public void mouseEntered(MouseEvent e) {
isHovered = true;
repaint();
}
@Override
public void mouseExited(MouseEvent e) {
isHovered = false;
repaint();
}
});
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponents(g);
g.setColor(background);
g.fillRect(1, 1, this.getWidth()-1, this.getHeight()-1);
if (isHovered) {
g.setColor(hoverColor);
g.fillRect(1, 1, this.getWidth()-1, this.getHeight()-1);
}
}
}
```
注意,这里的高亮颜色是使用一个半透明的黄色来实现,可以根据需要自行调整。同时,由于高亮效果是在鼠标进入和离开的事件中触发的,因此不会与selected属性产生冲突。
这样的棋盘中,如何实现棋盘的格子随鼠标移动而高亮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); } }
您可以在棋盘的每个格子上添加一个 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);
}
}
```
这里需要注意的是,为了避免高亮色过于鲜艳,我们可以在原来的颜色基础上稍微调整一下饱和度和亮度,使得高亮色更加柔和。
阅读全文
相关推荐
















