gpt4 book ai didi

java - PaintComponent 方法混合不同的 JPanel 组件

转载 作者:太空宇宙 更新时间:2023-11-04 15:11:43 25 4
gpt4 key购买 nike

我正在开发一个软件,它可以为我的 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()),然后它再次发生变化,结果是两者的混合。

    我认为这是因为它每次都会混合不同的部分,我的意思是它每次播放时的行为方式并不相同。

    我真的不希望这种情况发生,所以让我问你:我怎样才能制作原子方法来确保这不会成为问题?

  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(Graphics 对象)作为参数传递给paintBackground、paintStave 和paintNotes。

关于java - PaintComponent 方法混合不同的 JPanel 组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21268190/

25 4 0
文章推荐: html -
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com