我正在为我目前正在设计的游戏创建一个菜单,我正在使用我在Photoshop中设计的图像作为菜单的按钮,但我想知道是否有任何方法可以检测鼠标是否悬停在图像上。
我之前已经对常规矩形进行了此操作,但此形状不是基本矩形(单击此处查看形状)。
形状被绘制为带有Graphics2D的BufferedImage。
提前谢谢你的帮助!gya
您可以向对象添加MouseListener,并为MouseEntered事件编写代码。这将在鼠标首次进入组件边界时触发,但不会在单击时触发。Oracle在这方面有很好的文档。
https://docs.oracle.com/javase/tutorial/uiswing/events/mouselistener.html
您可以映射出您的多边形并通过添加MouseListener
来确定选择了哪个。下次重新绘制时,您可以显示所选内容。
您可以使用以下方法检查事件点是否包含在多边形中:
[Java文档]::Java.awt.Polygon.contains(点)
下面是一个示例:
import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import java.io.*;
import java.util.*;
import java.util.List;
import javax.imageio.ImageIO;
import javax.swing.*;
public class PolygonDetectorPanel extends JPanel implements MouseListener {
private static final long serialVersionUID = -8929816396666863908L;
private BufferedImage backgroundImage;
private List<Polygon> shapes;
private Polygon selectedPoly;
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JFrame frame = new JFrame("Polygon Detector");
PolygonDetectorPanel panel = new PolygonDetectorPanel();
frame.setContentPane(panel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public PolygonDetectorPanel() {
super();
initialize();
this.addMouseListener(this);
}
protected void initialize() {
try {
InputStream is = PolygonDetectorPanel.class.getClassLoader().getResourceAsStream("resources/buttons.png");
this.backgroundImage = ImageIO.read(is);
} catch (IOException e) {
e.printStackTrace();
}
int width = this.backgroundImage.getWidth();
int height = this.backgroundImage.getHeight();
this.setPreferredSize(new Dimension(width, height));
this.shapes = new ArrayList<Polygon>();
int buttonStartX = 13;
int buttonStartY = 54;
int buttonOffset = 100;
for (int i = 0; i < 4; i++) {
int[] w = { buttonStartX , buttonStartY + 33 + (i * buttonOffset) };
int[] nw = { buttonStartX + 50 , buttonStartY + (i * buttonOffset) };
int[] ne = { buttonStartX + 300 , buttonStartY + (i * buttonOffset) };
int[] e = { buttonStartX + 350 , buttonStartY + 33 + (i * buttonOffset) };
int[] se = { buttonStartX + 300 , buttonStartY + 66 + (i * buttonOffset) };
int[] sw = { buttonStartX + 50 , buttonStartY + 66 + (i * buttonOffset) };
int[] xPoints = { w[0], nw[0], ne[0], e[0], se[0], sw[0], w[0]};
int[] yPoints = { w[1], nw[1], ne[1], e[1], se[1], sw[1], w[1]};
this.shapes.add(new Polygon(xPoints, yPoints, 6));
}
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
if (this.backgroundImage != null) {
g.drawImage(this.backgroundImage, 0, 0, null);
}
Graphics2D g2 = (Graphics2D) g;
g2.setStroke(new BasicStroke(5, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND, 10.0f));
for (Polygon poly : this.shapes) {
if (poly == this.selectedPoly) {
g.setColor(Color.GREEN);
} else {
g.setColor(Color.RED);
}
g.drawPolygon(poly);
}
}
protected Polygon getClickedShape(Point point) {
for (Polygon poly : this.shapes) {
if (poly.contains(point)) {
return poly;
}
}
return null;
}
@Override
public void mouseClicked(MouseEvent e) {
Polygon poly = getClickedShape(new Point(e.getX(), e.getY()));
if (poly != null) {
this.selectedPoly = poly;
} else {
this.selectedPoly = null;
}
repaint();
}
@Override
public void mousePressed(MouseEvent e) { }
@Override
public void mouseReleased(MouseEvent e) { }
@Override
public void mouseEntered(MouseEvent e) { }
@Override
public void mouseExited(MouseEvent e) { }
}
这是一个截图。
问题内容: 我知道,如果鼠标悬停在文本上方,将允许显示文本。我想知道是否可以在鼠标悬停时更改图像?提前致谢。 问题答案: 我会在您保存图片的组件中添加一个。 然后只需重写方法并 更改图像即可。 这是一个完整的工作示例:
问题内容: 我有一张图片: 然后,我将其显示在屏幕上: 如何检测鼠标是否在触摸图像? 问题答案: 使用获得描述你的边界,然后使用来检查,如果鼠标光标这里面。 例:
问题内容: 如何更改此确切代码以对鼠标悬停产生悬停效果? 我尝试遵循其他一些问题和答案,但我无法真正遵循它们。 因此,HTML是: 现在,我要做的是当鼠标悬停在小图像上时更改大尺寸图像。 问题答案: 请尝试以下代码。工作正常 我修改了代码,希望它能稍作延迟。.但是,它不是动画。
问题内容: 我需要一个包含图像的菜单,当有人将鼠标悬停在菜单上时,图像应该会更改。 HTML CSS 我面临的问题是,当我将 鼠标悬停 在菜单项周围时,要显示在悬停上的图像显示 在 旧图像 的背面 。此外,显示的悬停背景图像的宽度和高度 很小 。请帮忙。谢谢![在此处输入图片描述] [1] 问题答案: 将此代码放在结束body标签之前, 将课程首页放置在标签中。做完了 完美运作。
我有以下HTML: 这是,它在悬停时导致图像上的覆盖: 以上所有的工作都很好,我很高兴。 问题是,我在标记中还有一个“阅读更多”按钮,当它悬停在上面时,我也想显示覆盖图像。我想我应该使用jQuery来实现这一点。 我有以下脚本: 脚本工作得很好,但当我将按钮悬停并尝试将图像时,覆盖层将不再出现。 所以总结一下: 当使用类悬停在上时,我使用CSS显示一个覆盖层,它起作用了。我使用jQuery在悬停在
问题内容: 我将鼠标悬停在图像上时要显示说明。我已经以一种不太理想的方式做到了这一点,在这里使用了图像精灵和鼠标悬停:我希望它看起来像我的样子,但是使用真实文本而不是图像。 我尝试了几种不同的方法,但似乎无法弄清楚该怎么做。我正在尝试仅使用HTML和CSS进行操作,但不确定是否可行。 请随意在我的代码中四处浏览,我将粘贴我认为与之相关的内容。 HTML 这很简单。将图片和“出现在悬停时”说明包装在