我正在寻找一种方法,将几个JComponents
绘制在彼此之上(重叠),并且仍然可以单独访问和更改它们。
E.g。用透明背景绘制三个JPanels
- 每个包含一个圆,一个矩形或一条线。
之后,我想改变圆圈的外观。其他两个不应该重新绘制(类似于Photoshop中的图层)。
我当前的项目有一个Jpanel
,有数千行,如果我每次重绘时都需要在鼠标悬停时重新设置一个矩形Jpanel
。
有没有一个体面的方法来实现这一目标?谢谢你的想法!
答案 0 :(得分:0)
我需要更改后面的矩形
您可以调用:
panel.repaint(rectangle); // or
panel.repaint(x, y, width, height);
指定要重新绘制的矩形区域。
答案 1 :(得分:0)
它工作得很好 - 如果其他人有类似的问题,这是我的代码! 第一张图像可以存储并稍后显示(buff) 确保在再次显示时生成新的BufferedImage(此处为画布),因为其他情况下会失去转移。感谢Gilbert Le Blanc
@Override
protected void paintComponent(Graphics g1) {
//Create image:
BufferedImage buff = new BufferedImage(mywidth, myheight, BufferedImage.TYPE_INT_ARGB);
//write to image:
Graphics2D g2 = (Graphics2D) buff.getGraphics();
g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER,(float) 0.01f));
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2.draw(xxxRectanglewhatever);
//then - later draw image again
BufferedImage canvas = new BufferedImage(mywidth, myheight, BufferedImage.TYPE_INT_ARGB);
canvas.getGraphics().drawImage(buff, 0, 0, null);
((Graphics2D) g1).setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
g1.drawImage(canvas, 0, 0, null);
canvas.flush();
}