[英]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.