gpt4 book ai didi

java - JFrame 的组件仅在调整大小后才位于正确的位置(有时)

转载 作者:行者123 更新时间:2023-11-30 07:29:25 24 4
gpt4 key购买 nike

这个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%)面板和/或草图未渲染到适当的位置。有时它们只是右侧框架尺寸的一半左右,有时我只看到框架中草图的底部。

用鼠标调整框架大小后,一切看起来都很好。我想将 JFrame 设置为未装饰,但无法调整窗口大小以将所有内容放置到位。

这就是我试图解决的问题:

还有其他想法吗?

最佳答案

这听起来像是线程问题。处理使用自己的动画线程,所以我对你遇到问题并不感到惊讶,而且它们是零星的,我并不感到惊讶。这就是线程的本质。

事实上,最新版本的Processing 取消了向Swing 应用程序添加Processing 草图的功能,如下所示。如果你确实想解决这个问题,你应该更新到最新版本的Processing并将其用作Java库。这需要更多的工作,但比继续采用这种旧方法更“正确”。

但因为我知道这不是你想听到的,所以我首先尝试的是调用 JFrame.revalidate()功能。您必须在处理草图初始化后执行此操作,这对于上述线程问题可能会很棘手。您可能必须将其置于某种延迟中,或者可以通过 setup() 函数来完成。

如果这不起作用,您可以尝试在延迟一段时间后以编程方式调整 JFrame 的大小。这相当黑客,但同样,“正确”的继续方法是更新您的处理并停止以旧方式嵌入它。

关于java - JFrame 的组件仅在调整大小后才位于正确的位置(有时),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36361349/

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