簡體   English   中英

paintComponent方法混合了不同的JPanel組件

[英]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將彼此繪制的組件混合在一起。 我想問一下,是否有人對地球上正在發生的事情有任何了解? 在我看來:

  1. 可能是因為我分開了上面所看到的繪畫方法:

     paintBackground(); paintStave(); paintNotes(); 

    然后,當軟件開始繪制時,它將繪制第一個JPanel某些部分paintBackground()例如paintBackground() ),然后paintBackground()桅桿吉他的某些部分( paintBackground() ),然后再次更改,結果是兩者的混合。

    我認為這是因為它每次都混合不同的部分,我的意思是每次播放時行為都不盡相同。

    我真的不希望這種情況發生,所以讓我問你:我如何制作原子方法以確保這不是問題?

  2. 我誤解了滾動方法。 我以這種方式滾動:

     //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.

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