[英]How do I create a Mock of a JFrame/JPanel that supports repaint functionality
[英]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.