Как установить ширину и высоту JPanel? - PullRequest
15 голосов
/ 07 мая 2011

Я занимаюсь разработкой игры Snake с использованием Java.Ширина и высота платы (где все действия имеют место) должны быть фиксированными (640 пикселей * 480 пикселей).

Структура:

  • Основной класс , который расширяетсяот JFrame class,
  • Board class, который простирается от JPanel class;

In 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.

Редактировать:

Все работы ... почти.

Основные Класс:

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 пиксель!

Ответы [ 2 ]

10 голосов
/ 07 мая 2011

пожалуйста, что-то пошло х х х * х, и это совсем не так, проверьте, что

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 , и все же я по-прежнему доволен, что это будет устаревшим)

РЕДАКТИРОВАТЬ: забыть 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();
            }
        });
    }
}
7 голосов
/ 07 мая 2011
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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...