Java:重新定位绘制到 JFrame 中的 Canvas 时出现问题

标签 java swing canvas jframe location

我无法将 Canvas 绘制在 JFrame 的中心。我的希望是在 JFrame 上绘制一个具有精美边框的图像,然后 Canvas 将位于 JFrame 的中心。我尝试过canvas.setLocation(Point p)和canvas.setBounds(矩形r)和Canvas.setLocation(int x,int y) > 我无法让它们中的任何一个工作。在调用 game.frame.pack() 之前我还尝试了以下操作:

game.frame.setLayout(new BorderLayout());
game.frame.add(game, BorderLayout.CENTER);

这是 Canvas 的设置:

public Game() {
    Dimension size = new Dimension((frameWidth * scale), frameHeight * scale);
    setPreferredSize(size);
    Game.game = this;
    //draw game items
    ....
}

然后这是 JFrame 设置,它是在 main 方法期间完成的:

game = new Game();
    game.frame.setResizable(false);
    game.frame.setUndecorated(true); //Enable for full screen
    game.frame.setLayout(new BorderLayout()); //Doesn't work
    game.frame.add(game, BorderLayout.CENTER); //Doesn't work
    //game.frame.add(game); //Just calling this doesn't work
    game.frame.pack();
    game.frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

    //Window listener exitListener
    ....

    game.frame.addWindowListener(exitListener);
    game.frame.setLocationRelativeTo(null);
    game.frame.setVisible(true);
    game.frame.requestFocus();
    game.start();

也尝试过这个:

    game = new Game();
    game.frame.setResizable(false);
    game.frame.setUndecorated(true); //Enable for full screen
    game.frame.setLayout(new GridBagLayout());
    game.frame.add(game, new GridBagConstraints());
    game.frame.pack();
    game.frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

什么也不做。完整代码是here ,在问题空间里发帖太多了。

谢谢你的帮助

最佳答案

I can't get my Canvas to be drawn in the centre of my JFrame.

最简单的方法是使用 GridBagLayout 而不是 BorderLayout:

game.frame.setLayout(new GridBagLayout());
game.frame.add(game, new GridBagConstraints());

阅读 How to Use GridBagLayout 上的 Swing 教程中所述的weightx/weighty 约束了解为什么这有效。

关于Java:重新定位绘制到 JFrame 中的 Canvas 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34241915/

相关文章:

java - Elasticsearch 全局搜索对多个索引的不同过滤器

java - 如何使用 Gson 序列化 java.nio.file.Path?

java - 为什么我不能将框架frame.setcontentPane(null)设置为绝对布局?

javascript - HTML 5 Canvas - 围绕自己的原点旋转多个对象

javascript - 将 html5 Canvas 输出捕获为视频或 swf 或 png 序列?

java - hamcrest TypeSafeMatcher 无法匹配双数组

java - 使用 Java ExecutorService,如何完成主动执行的任务但停止等待任务的处理?

java - Windows 构建器的外观被忽略

java - jpanel 与背景图像

javascript - 如何使用 Canvas 将 div 渲染的 .png 逆时针旋转 90°?