2013-05-13 134 views
-1

所以我有一个嵌入到JFrame中的java.applet.Applet。该applet使用java.awt.Canvas进行绘制。 的代码将是相当多的,我张贴,并没有“小”的例子,但这里是一个图片至少:停止闪烁/重绘

enter image description here 好了,所以在上面,在画布上连续被小程序借鉴。当按下切换按钮时,底部的JTextArea被隐藏,并且当没有按下切换按钮时显示。

但是,每当我显示/隐藏TextArea时,Applet/Canvas都会闪烁。每次显示/隐藏TextArea时,都会调整JFrame的大小。

现在的小片段我有显示/隐藏的样子:

public void setConsoleVisible(boolean Visible) { 
    this.ScrollPane.setVisible(Visible); //Show/Hide the JTextArea. 
    frame.pack(); //Pack the JFrame to resize it. 
    frame.setSize(frame.getWidth(), frame.getHeight() + 1); //resize the frame by 1px. 
} 

我怎么能阻止它,当它调整大小和显示/隐藏的JTextArea闪烁?我的画布/小程序已经双缓冲。

+1

听起来有点像混合重和轻量级组件。 AWT组件在执行自定义绘画时以闪烁着称,因为它们不是双缓冲 – MadProgrammer 2013-05-13 03:55:44

+0

嗯,但除了awt画布和applet(不是JApplet)之外,我不能使用其他任何东西。原因是因为这是我被告知要使用的并且被给予applet。我将它从Jar加载到JFrame中。 任何想法我可以做什么?我在想,这是调整它的大小。 – Brandon 2013-05-13 03:58:12

+0

请尝试使用活动绘画。这将需要一个循环和捆绑主线程,但摇摆元素应该从EDT处理。 – Nikki 2013-05-13 04:01:56

回答

1

您正在绘制的区域可能小于可见区域。因此,一些垃圾被涂上造成闪烁。为什么你只调整一个像素的帧?尝试删除,

frame.setSize(frame.getWidth(), frame.getHeight() + 1);