gpt4 book ai didi

java - Swing重复重画JComboBox闪烁

转载 作者:行者123 更新时间:2023-12-01 13:10:53 26 4
gpt4 key购买 nike

我的动画和 JComboBox 遇到问题。在我的应用程序中,我可以通过使用鼠标和键盘或设置动画来移动和变换形状。

我的组件层次结构如下:放置在 JFrame 中的 JPanel 包含一个名为 EditorCanvas 的面板,其中可以修改和绘制形状,以及一个名为 DrawMenu 的面板,其中包含一些 JButton 和我的 JComboBox。

JFrame -> JPanel -> EditorCanvas
JFrame -> JPanel -> DrawMenu -> JComboBox

JComboBox 用于选择单击时要添加到 Canvas 的形状。在另一个线程中,在计算出新位置等后,我每 10 毫秒在 Canvas 上调用 repaint() 一次...

问题是我无法再使用 JComboBox,因为弹出窗口在我打开它后立即消失。这是我在某个时候重新粉刷造成的。真正奇怪的是我的 JComboBox 放置在另一个面板中,因此不应该重新绘制它。

我尝试替换 SwingUtilities.invokeLater 调用的 Runnable 中的重绘调用,但问题仍然相同。

以下是我的代码的一些相关部分:

public class EditorCanvas extends JPanel implements MouseListener, MouseMotionListener, KeyListener {

...

@Override
public void paintComponent(Graphics g) {

super.paintComponent(g);

// To keep keyboard focus
this.requestFocusInWindow();

this.graphics = (Graphics2D) g.create();

this.graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

this.mainRenderer.paintAll(this.graphics);
}


public class AnimationManager implements Runnable {

...

public void run () {

try {

while (Thread.currentThread() == this.thread) {

// Update time values
double curTime = System.currentTimeMillis();
double deltaTime = curTime - this.lastTime;
this.lastTime = curTime;

for (Animation anim : this.animations) {
anim.update(deltaTime);
}

SwingUtilities.invokeLater(new Runnable() {
public @Override void run() {
EditorParameters.getCanvas().repaint();
}
});

// Pause the animation if it has to
synchronized (this) {

while (this.pause) {
System.out.println("\nAnimation paused!\n");
this.wait();
}
}

Thread.sleep(SLEEP_TIME);
}

最佳答案

The problem is that I cannot use my JComboBox anymore, as the popup disappear immediately

绘画方法仅用于绘画。

this.requestFocusInWindow();

您永远不应该在绘画方法中调用类似的方法。

我什至不知道为什么你需要自定义面板。您不应该调用另一个组件的 paintAll() 方法。 Swing 将负责绘制面板的所有子组件。

关于java - Swing重复重画JComboBox闪烁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22881839/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com