簡體   English   中英

如何在JFrame中創建獨立的JPanel-Layers並分別重新繪制每個圖層

[英]How to create independent JPanel-Layers within JFrame and repaint each indiviually

我正在尋找一種將幾個JComponents彼此繪制(重疊),並且仍然能夠單獨訪問和更改它們的方法。

例如,繪制具有透明背景的三個JPanels每個JPanels包含一個圓,一個矩形或一條線。 之后,我想更改圓圈的外觀。 不應重繪其他兩個(類似於Photoshop中的圖層)。

我當前的項目有一個包含數千行的Jpanel ,如果每次鼠標Jpanel都重新繪制完整的Jpanel ,則需要在鼠標懸停時在背面更改一個矩形。

有沒有做到這一點的體面方法? 已經感謝您的想法!

我需要在后面更改一個矩形

您可以調用:

panel.repaint(rectangle); // or 
panel.repaint(x, y, width, height);

指定要重新繪制的矩形區域。

它工作得很好-如果有人遇到類似問題,這是我的代碼! 可以存儲第一個圖像,並稍后在其上顯示(buff)。請確保在再次顯示時生成新的BufferedImage(此處為畫布),否則會丟失透明度。 感謝吉爾伯特·勒布朗克

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM