这个JFrame
包含JPanel
,其中包含processing
草图。代码看起来像这样:
import javax.swing.JFrame;
import javax.swing.JPanel;
import processing.core.PApplet;
public class TestCase {
public static void main(String[] args) {
ProcessingFrame pFrame = new ProcessingFrame();
pFrame.setVisible(true);
}
}
@SuppressWarnings("serial")
public class ProcessingFrame extends JFrame{
public ProcessingFrame(){
this.setSize(600, 400);
this.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
ProcessingSketch pSketch = new ProcessingSketch();
panel.add(pSketch);
this.add(panel);
pSketch.init();
this.setVisible(true);
}
}
public class ProcessingSketch extends PApplet{
public ProcessingSketch(){
//...
}
public void setup(){
size(600, 400);
background(200);
}
public void draw(){
rect(250,100,100,200);
}
}
很少(约50%)panel
和/或sketch
未呈现到适当的位置。有时它们只是右边框架尺寸的一半左右,有时我只看到框架中草图的底部。
用鼠标调整框架大小后,一切看起来都很好。我想将JFrame设置为undecorated
,但是没有办法调整窗口大小以便将所有内容都放到位。
这是我试图解决的问题:
JFrame.repaint()
,如下所示:Java items appear only after the window is resize。 - 没效果。
我以为我可以手动调整窗口大小,然后更改为undecorated
。在回答这个问题之后:Modifying a JFrame from within a Listener。但是处理草图崩溃了,因为我必须dispose
JFrame。
还有其他想法吗?
答案 0 :(得分:1)
这听起来像是一个线程问题。 Processing使用自己的动画线程,所以我对你遇到问题并不感到惊讶,我并不觉得他们是零星的。这就是线程的本质。
事实上,最新版本的Processing删除了将Processing草图添加到这样的Swing应用程序的功能。如果您确实想要解决此问题,则应更新到最新版本的Processing并将其用作Java库。这是更多的工作,但它比继续这种旧方式更“正确”。
但是既然我知道那不是你想听到的,我会尝试的第一件事就是调用JFrame.revalidate()
函数。在初始化Processing sketch之后你必须这样做,这可能是上述线程问题的棘手问题。您可能必须将其置于某种延迟中,或者可以从setup()
函数执行此操作。
如果这不起作用,您可以尝试以编程方式在延迟一段时间后调整JFrame的大小。这是非常hackish,但再次,“正确”的方法是更新你的处理并停止以旧的方式嵌入它。