Java 双重缓冲和油漆

Java 双重缓冲和油漆,java,swing,mouseevent,double-buffering,Java,Swing,Mouseevent,Double Buffering,我同时使用双缓冲和Swing事件,这两个事件似乎有冲突。我正在使用一个JSlider并尝试加倍缓冲区。它实际上画了双缓冲区,但是双缓冲区又被画出来了,我失去了我的图像。我正在使用一个JSlider来做双缓冲绘制,事件系统似乎在重新绘制帧(有两个组件,一个图像和滑块)。我该怎么做才对呢?我已经尝试过在组件中设置一个repait变量来表示不重新绘制,但这不起作用。是否存在某种类型的事件开关来停止某些组件的重新喷漆?我应该不使用双缓冲吗? 下面是一段代码片段 private void drawOneB

我同时使用双缓冲和Swing事件,这两个事件似乎有冲突。我正在使用一个JSlider并尝试加倍缓冲区。它实际上画了双缓冲区,但是双缓冲区又被画出来了,我失去了我的图像。我正在使用一个JSlider来做双缓冲绘制,事件系统似乎在重新绘制帧(有两个组件,一个图像和滑块)。我该怎么做才对呢?我已经尝试过在组件中设置一个repait变量来表示不重新绘制,但这不起作用。是否存在某种类型的事件开关来停止某些组件的重新喷漆?我应该不使用双缓冲吗? 下面是一段代码片段

private void drawOneByOne(ImageComponent imgComponent, JFrame f,
        MapObjects mapObjects, int number) {
    f.createBufferStrategy(2); 

    BufferStrategy bufferStrategy = f.getBufferStrategy();
    Graphics2D g = (Graphics2D)bufferStrategy.getDrawGraphics();            
    bufferStrategy = f.getBufferStrategy();
    g = (Graphics2D)bufferStrategy.getDrawGraphics();
    // draw the map and then the points
    imgComponent.paint(g);
    for (int i = 0; i < number; i++) {
        imgComponent.drawPoint(mapObjects.get(i),g);
    }
    imgComponent.repaint = false;
    bufferStrategy.show();
    g.dispose();
    imgComponent.repaint = true;
}
public void stateChanged(ChangeEvent e) {
    JSlider source = (JSlider)e.getSource();
    if (!source.getValueIsAdjusting()) {
        int voterNumber = source.getValue();
        System.out.println("Drawing One By One, " + voterNumber);
        drawOneByOne(this.imgComponent, this.f, this.mapObjects, voterNumber);
    }
}
private void drawine逐个(图像组件imgComponent,JF帧,
映射对象(映射对象,整数编号){
f、 创新战略(2);
BufferStrategy BufferStrategy=f.getBufferStrategy();
Graphics2D g=(Graphics2D)bufferStrategy.getDrawGraphics();
bufferStrategy=f.getBufferStrategy();
g=(Graphics2D)bufferStrategy.getDrawGraphics();
//画地图,然后画点
IMG组件油漆(g);
for(int i=0;i
。 .
.

Swing通过
setDoubleBuffered(true)
进行双缓冲,如果这是您想要实现的全部功能的话。双缓冲没有什么问题,它只是使用了更多的内存,在swingcomponents的parentcontainer上调用它。您无法控制
重新绘制
,除非您调用JFrame,否则操作系统会在认为必要时调用它。

我认为默认情况下,所有JComponent子组件都会将其设置为true。Swing组件从父容器继承双缓冲。因为默认情况下根窗格是双缓冲的,所以所有组件都是双缓冲的。我的信息已经过时了,虽然我应该知道,但是我从来没有注意到swing组件上有任何闪烁。为了更快地获得更好的帮助,请发布一个。