1. ホーム
  2. java

[解決済み] JPanelの幅と高さを設定するには?

2022-01-25 07:31:22

質問

Javaでスネークゲームを開発しています。ボード(すべてのアクションが行われる場所)の幅と高さは固定(640ピクセル*480ピクセル)である必要があります。

構造です。

  • メインクラス を継承している JFrame クラスがあります。
  • ボード を継承したクラスです。 JPanel クラスがあります。

メイン クラスには、次のようなものがあります。

setSize( 1024, 768 );

...そしてBoardクラスでは...

setSize( BOARDS_WIDTH, BOARDS_HEIGHT );

問題は、メインと唯一のウィンドウが1024 * 768のように見えるが、その中のパネルが640 * 480のように見えないことです。私は setBackground() のように、背景が640 * 480より多く塗りつぶされています。

ボードの幅と高さを640 * 480のように、メインウィンドウの幅と高さを-ボードの幅と高さが正しいようにする方法はないでしょうか。

今はこんな感じです...。

編集する

すべてうまくいく...ほとんど。

メイン クラスがあります。

add( new Board(), BorderLayout.CENTER );
pack();
setResizable( false );
setLocationRelativeTo( null );
setVisible( true );
setDefaultCloseOperation( EXIT_ON_CLOSE );
setTitle( "Snake (by daGrevis)" );

ボード クラスがあります。

setPreferredSize( new Dimension( 640, 480 ) );

グレーの背景は642×482です。1ピクセルずつ全部を包むボーダーがあるようなものです。

解決方法は?

お願いです、何か変です。 x x*xであり、それは全く真実ではない、それを確認します。

JButton Size - java.awt.Dimension[width=400,height=40]
JPanel Size - java.awt.Dimension[width=640,height=480]
JFrame Size - java.awt.Dimension[width=646,height=505]

のコード(基本的なものは トレイル JFC/SwingでGUIを作る とはいえ、それは時代遅れだろうということで納得しました )

EDIT: 忘れ物 setDefaultCloseOperation()

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class FrameSize {

    private JFrame frm = new JFrame();
    private JPanel pnl = new JPanel();
    private JButton btn = new JButton("Get ScreenSize for JComponents");

    public FrameSize() {
        btn.setPreferredSize(new Dimension(400, 40));
        btn.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println("JButton Size - " + btn.getSize());
                System.out.println("JPanel Size - " + pnl.getSize());
                System.out.println("JFrame Size - " + frm.getSize());
            }
        });
        pnl.setPreferredSize(new Dimension(640, 480));
        pnl.add(btn, BorderLayout.SOUTH);
        frm.add(pnl, BorderLayout.CENTER);
        frm.setLocation(150, 100);
        frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // EDIT
        frm.setResizable(false);
        frm.pack();
        frm.setVisible(true);
    }

    public static void main(String[] args) {
        java.awt.EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                FrameSize fS = new FrameSize();
            }
        });
    }
}