gpt4 book ai didi

java - 如何围绕 JPanel 缩放 JFrame?

转载 作者:行者123 更新时间:2023-11-30 02:28:51 24 4
gpt4 key购买 nike

我尝试对 PONG 游戏进行编程。

我的问题:我使用 JPanel 作为大小为 (1000;600) 的“比赛场”。但是,当我使用 setSize(比赛场的尺寸)将 JPanel 添加到 JFrame 时,我的右边框和下边框出现问题。看起来 JFrame 的大小变大了 (1000;600),而 JPanel 变小了。我该如何修复它?

最佳答案

JPanel 的大小应由其首选大小决定,而不是其大小。最简单的方法是调用 setPreferredSize(...) ,但这允许其他代码更改其首选大小,因此最安全的方法是覆盖其 public Dimension getPreferredSize() 方法。如果使用 contentPane 将 JPanel 添加到 JFrame 的 BorderLayout,然后在添加 JPanel 之后和显示它之前在 JFrame 上调用 pack(),那么 JFrame 自然会正确调整自身大小。

例如:

public class MyJPanel extends JPanel {

private static final int PREF_W = 1000;
private static final int PREF_H = 600;

public MyJPanel() {
}

@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);

// to make smooth graphics
Graphics2D g2 = (Graphics2D) g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

// do your drawing here
}

// size the JPanel correctly
@Override
public Dimension getPreferredSize() {
if (isPreferredSizeSet()) {
return super.getPreferredSize();
}
return new Dimension(PREF_W, PREF_H);
}

private static void createAndShowGui() {
JFrame frame = new JFrame("My GUI");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new MyJPanel());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}

public static void main(String[] args) {
SwingUtilities.invokeLater(() -> createAndShowGui());
}
}

关于java - 如何围绕 JPanel 缩放 JFrame?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44769353/

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