Java JPanel有时会在启动程序后移到左上角

Java JPanel有时会在启动程序后移到左上角,java,swing,jpanel,Java,Swing,Jpanel,在我的程序中,我使用JFrame并通过setContentPane()将其内容窗格设置为JPanel。有时JPanel会向左上移动大约10到15个像素,因此在右侧和底部是白色区域 我测试了面板的位置、大小和插图,但它们都是相同的,没有问题 public class Window extends JFrame { private static final long serialVersionUID = 1L; private DrawPanel dp; public

在我的程序中,我使用JFrame并通过
setContentPane()
将其内容窗格设置为JPanel。有时JPanel会向左上移动大约10到15个像素,因此在右侧和底部是白色区域

我测试了面板的位置、大小和插图,但它们都是相同的,没有问题

public class Window extends JFrame {

    private static final long serialVersionUID = 1L;

    private DrawPanel dp;

    public Window(int width, int height, String title) {
        dp = new DrawPanel(); // constructor only calls setFocusable(true);

        setResizable(false);
        setSize(width, height);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setTitle(title);
        setLocationRelativeTo(null);
        setContentPane(dp);
        setVisible(true);

        dp.init(); // only initializes a BufferedImage
    }

    public DrawPanel getDrawPanel() {
        return dp;
    }
}

上图显示了问题所在,下图显示了问题所在:


我希望你能理解我的问题并能帮助我。谢谢

好的,多亏了他的评论,我终于解决了我的问题。我在
SwingUtilities
中使用了
invokeAndWait
方法。现在JFrame和JPanel在
事件调度线程上运行,问题不再出现

SwingUtilities.invokeAndWait(new Runnable() {
    @Override
    public void run() {
        dp = new DrawPanel();

        setResizable(false);
        setSize(width, height);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setTitle(title);
        setLocationRelativeTo(null);
        setContentPane(dp);
        setVisible(true);

        dp.init();
    }
});

谢谢。

请提供。考虑提供一个说明你的问题的方法。这不是一个代码转储,而是您正在做的一个示例,它突出了您所遇到的问题。这将导致更少的混乱和更好的响应调用
setresizeable(false)
后跟
path
setSize
setresizeable
将更改某些平台上框架装饰的大小我尝试调用
setresizeable(false)设置大小之前,但问题仍然存在。顺便问一下,使用Windows。那么上面的图片和下面的图片有什么区别呢?你让它正常工作一次,所以找出区别并修复它。由于您没有按照要求发布两次代码,我们无法提供真正的帮助。