[英]paintComponent method mixes different JPanel components
我正在開發一個為我的GUI繪制2種不同的JPanel
的軟件:樂譜和桅桿吉他。 分數是擴展JPanel
的類,並具有如下的paintComponent()
方法:
public class PanelPartitura extends JPanel implements MouseListener{
public void paintComponent(Graphics comp){
super.paintComponent(comp);
comp2D = (Graphics2D)comp;
comp2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
paintBackground();
paintStave();
paintNotes();
[...]
}
}
桅桿吉他也是一門課:
public class PanelGuitarra extends JPanel implements MouseListener
public void paintComponent(Graphics comp){
super.paintComponent(comp);
comp2D = (Graphics2D)comp;
comp2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
//Then I call secondary methods to paint it:
paintBackground();
PaintPoints();
}
[...]
}
它仍然可以正常工作。 我將類PanelPartitura
添加到JScrollPane
以便在播放時滾動:
partitura = new PanelPartitura();
JScrollPartitura = new JScrollPane(partitura, JScrollPane.VERTICAL_SCROLLBAR_NEVER, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
在播放和滾動軟件時,兩個JPanel
將彼此繪制的組件混合在一起。 我想問一下,是否有人對地球上正在發生的事情有任何了解? 在我看來:
可能是因為我分開了上面所看到的繪畫方法:
paintBackground(); paintStave(); paintNotes();
然后,當軟件開始繪制時,它將繪制第一個JPanel
某些部分paintBackground()
例如paintBackground()
),然后paintBackground()
桅桿吉他的某些部分( paintBackground()
),然后再次更改,結果是兩者的混合。
我認為這是因為它每次都混合不同的部分,我的意思是每次播放時行為都不盡相同。
我真的不希望這種情況發生,所以讓我問你:我如何制作原子方法以確保這不是問題?
我誤解了滾動方法。 我以這種方式滾動:
//the note playing currently position is saved in positionBar positionBar = 150 + 50*PGuitarra.composicion.getAcordeSeleccionado().getPosicionXAcorde(); //horizontalScrollBar is moved to this position PGuitarra.JScrollPartitura.getHorizontalScrollBar().setValue(positionBar);
我看到您的繪制方法沒有使用相同的Graphics對象(在JPanel范圍內)。 那可能是原因嗎? 如果是這樣,請嘗試將comp(圖形對象)作為參數傳遞給paintBackground,paintStave和paintNotes。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.