Вы можете расширить 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
.Это сначала перерисовает изображение, а затем нарисует оверлейный прямоугольник поверх изображения.