繁体   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