我的目标是单击鼠标时出现矩形。 这是我当前的代码片段:
try{
image = ImageIO.read(file);
g.setColor(new Color(255,0,0));
g.drawRect(x, y, 100, 100);
}
icon = new ImageIcon(image);
label = new JLabel(icon);
label.addMouseListener(this);
public void mouseReleased(MouseEvent event) {
// TODO Auto-generated method stub
if(event.getSource() == label){
x = event.getX();
y = event.getY();
repaint();
input = JOptionPane.showInputDialog("Something:");
System.out.println(input);
}
}
最佳答案
您可以扩展 JPanel 来完全执行您想要的操作:
class MyPanel extends JPanel{
//....
private java.awt.Rectangle rectangle = null;
private Image imageToDraw;
private Point imageLocation;
public setImageToDraw(Image toDraw,Point p){
imageToDraw=toDraw;
imageLocation = p;
}
public void setRectangle(java.awt.Rectangle rectangle overlayRect){
rectangle = overlayRect;
}
// Override paintComponent to draw image and rectangle
@Override
public void paintComponent(Graphics g) {
g.drawImage(imageToDraw,imageLocation.getX(),imageLocation.getY(),this);
if(rectangle != null) {
// Draw your rectangle here...
}
}
}
在鼠标监听器中,执行以下操作:
// Declare a field of type MyPanel
private MyPanel drawingPanel = new MyPanel
// ... Initialization stuff...
drawingPanel.setImageToDraw(toDraw,p);
public void mouseReleased(MouseEvent event) {
// TODO Auto-generated method stub
if(event.getSource() == label){
// Compute rectangle boundaries
drawingPanel.setRectangle(overlayRect);
}
drawingPanel.repaint();
}
基本上,MyPanel
对象将始终具有要绘制的图像集。这样图像就一直绘制在面板上。当您想要一个覆盖矩形时,您所要做的就是设置 MyPanel.rectangle
字段并刷新您的 MyPanel
实例。这将首先重绘图像,然后在图像顶部绘制覆盖矩形。
关于java - 如何让鼠标点击时在图像上显示形状?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8200943/