私はゲームPONGをプログラムしようとします。JPanelの周りにJFrameをスケールする方法は?
問題:サイズ(1000; 600)の「マッチフィールド」としてJPanelを使用します。しかし、JFrameにsetSize(matchfieldの次元)を使ってJPanelを追加すると、右と下の境界に問題があります。 JFrameがサイズ(1000; 600)を取得し、JPanelが小さくなったようです。 どうすれば修正できますか?
私はゲームPONGをプログラムしようとします。JPanelの周りにJFrameをスケールする方法は?
問題:サイズ(1000; 600)の「マッチフィールド」としてJPanelを使用します。しかし、JFrameにsetSize(matchfieldの次元)を使ってJPanelを追加すると、右と下の境界に問題があります。 JFrameがサイズ(1000; 600)を取得し、JPanelが小さくなったようです。 どうすれば修正できますか?
JPanelのサイズは、サイズではなく、推奨サイズで決める必要があります。これを行う最も簡単な方法は、setPreferredSize(...)
を呼び出すことですが、それによって他のコードが優先サイズを変更できるため、最も安全な方法はpublic Dimension getPreferredSize()
メソッドをオーバーライドすることです。 JPanelがJFrameのBorderLayoutにcontentPaneを使用して追加され、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());
}
}
使用 'JFrameの番号のpack'、これはあなたがコンポーネントが適切なサイジングのヒントを提供しているしていると仮定し、内容を中心にウィンドウをパックします – MadProgrammer