小编Nic*_*k C的帖子

将Swing组件渲染到屏幕外缓冲区

我有一个在32位Windows 2008 Server上运行的Java(Swing)应用程序,它需要将其输出呈现为屏幕外图像(然后由另一个C++应用程序拾取以便在其他地方呈现).大多数组件都能正确呈现,除非在奇怪的情况下,刚刚失去焦点的组件被另一个组件遮挡,例如,如果有两个JComboBox彼此接近,如果用户与较低的组件交互,则点击上面一个,所以它的下拉与另一个盒子重叠.

在这种情况下,失去焦点的组件在遮挡它之后呈现,因此出现在输出的顶部.它在正常的Java显示中正确呈现(在主显示器上全屏运行),并且尝试更改有问题的组件的层无济于事.

我使用自定义RepaintManager将组件绘制到屏幕外图像,我假设问题在于为每个有问题的组件调用addDirtyRegion()的顺序,但我想不出一个好方法识别何时发生这种特定状态以防止它.黑客攻击以便刚刚失去焦点的对象不会被重新绘制可以解决问题,但显然会导致更大的问题,即在其他所有正常情况下都不会重新绘制它.

有没有办法以编程方式识别这种状态,或重新排序事物,以便它不会发生?

非常感谢,

缺口

[编辑]添加了一些代码作为示例:

重绘经理和相关课程:

class NativeObject {
    private long nativeAddress = -1;

    protected void setNativeAddress(long address) {
        if ( nativeAddress != -1 ) {
            throw new IllegalStateException("native address already set for " + this);
        }
        this.nativeAddress = address;
        NativeObjectManager.getInstance().registerNativeObject(this, nativeAddress);
    }   
}

public class MemoryMappedFile extends NativeObject {
    private ByteBuffer buffer;

    public MemoryMappedFile(String name, int size)
    {
        setNativeAddress(create(name, size));
        buffer = getNativeBuffer();
    }

    private native long create(String name, int size);

    private native ByteBuffer getNativeBuffer(); …
Run Code Online (Sandbox Code Playgroud)

java swing

5
推荐指数
1
解决办法
2378
查看次数

尽管控制台子系统设置,Visual Studio 2010 C++仍未显示控制台输出

我有一个创建控制台应用程序的项目,作为更大解决方案的一部分,但它不会在控制台上显示任何内容.我检查了/SUBSYSTEM:CONSOLE设置两个调试和发布,并试图既std::coutprintf,既不导致显示任何输出.

整个VS解决方案包含几个包含底层业务代码的静态库,以及三个可执行文件 - 主要GUI (QT/OpenGL),单元测试(boost)和此控制台应用程序.一些库类使用Qt(主要用于信号/插槽).GUI和单元测试都按预期运行(在测试的情况下,包括写入控制台输出).

我也尝试AllocConsole在main函数的开头添加一个调用- 这会导致出现一个控制台窗口,但是仍然没有写入 - 是的,我检查过代码正在调用cout!

还有什么可能是错的?某个地方还有其他设置吗?还是没有告诉我Qt重定向stdout

c++ qt cout visual-studio-2010

5
推荐指数
1
解决办法
1702
查看次数

标签 统计

c++ ×1

cout ×1

java ×1

qt ×1

swing ×1

visual-studio-2010 ×1