如何在JFrame中创建独立的JPanel-Layers并逐个重新绘制

时间:2016-11-10 11:49:25

标签: java swing jcomponent jlayeredpane

我正在寻找一种方法,将几个JComponents绘制在彼此之上(重叠),并且仍然可以单独访问和更改它们。

E.g。用透明背景绘制三个JPanels - 每个包含一个圆,一个矩形或一条线。 之后,我想改变圆圈的外观。其他两个不应该重新绘制(类似于Photoshop中的图层)。

我当前的项目有一个Jpanel,有数千行,如果我每次重绘时都需要在鼠标悬停时重新设置一个矩形Jpanel

有没有一个体面的方法来实现这一目标?谢谢你的想法!

2 个答案:

答案 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();
}