web-dev-qa-db-ja.com

JPanelの幅と高さを設定する方法は?

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

構造:

  • メインクラス JFrame クラスから拡張、
  • JPanel クラスから拡張される Board クラス。

Main クラスには次のようなものがあります...

setSize( 1024, 768 );

...そしてボードクラスでは...

setSize( BOARDS_WIDTH, BOARDS_HEIGHT );

問題は、メインで唯一のウィンドウが1024 * 768のように見えるが、その内側のパネル-640 * 480ではないことです。 setBackground()もあり、背景は640 * 480。

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

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

Width and height are ~1000 * ~750, not 640 * 480.

編集:

すべて動作します...ほとんど。

Main クラス:

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

Board クラス:

setPreferredSize( new Dimension( 640, 480 ) );

灰色の背景は642 * 482です! 1ピクセルですべてを囲む境界線があるように!

15
daGrevis

お願いします、何かがxxx * 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]
_

コード( Trail:JFC/Swingを使用したGUIの作成 からの基本的なものですが、それでも時代遅れになることに満足しています)

編集: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();
            }
        });
    }
}
_
10
mKorbel
Board.setPreferredSize(new Dimension(x, y));
.
.
//Main.add(Board, BorderLayout.CENTER);
Main.add(Board, BorderLayout.CENTER);
Main.setLocations(x, y);
Main.pack();
Main.setVisible(true);
7
mKorbel