JPanel не отображается при использовании .pack () - PullRequest
0 голосов
/ 04 ноября 2019

Я пытаюсь создать пользовательский интерфейс с парой JPanels. У меня есть заголовок вверху, затем главная панель, которая содержит меню с кнопкой, игровую панель, партитуру внизу, и я использую .pack (), чтобы все измерить. Проблема в том, что игровая панель почти не появляется.

Это код JFrame

package tron;

import java.awt.BorderLayout;
import java.awt.Color;
import javax.swing.*

public class Tron extends JFrame
{
    private GamePanel gamePanel = new GamePanel();
    private MenuPanel menuPanel = new MenuPanel();
    private ScorePanel scorePanel = new ScorePanel(0 , Color.CYAN);
    public Tron()
    {
        initGUI();
        setTitle("Tetris");
        setResizable(false);
        pack();
        setLocationRelativeTo(null);
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    public void initGUI()
    {
        TitleLabel titleLabel = new TitleLabel("Tron");
        add(titleLabel, BorderLayout.PAGE_START);
        JPanel mainPanel = new JPanel();
        mainPanel.setBackground(Color.red);
        mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));
        add(mainPanel, BorderLayout.CENTER);
        mainPanel.add(menuPanel);
        mainPanel.add(gamePanel);
        mainPanel.add(scorePanel);
    }
    public static void main(String[] args)
    {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Tron().setVisible(true);
            }
        });
    }
}

Панель показателей, панель меню и метка заголовка работают нормально, поэтому вот код для игровой панели.

package tron;

import java.awt.*;
import javax.swing.JPanel;

public class GamePanel extends JPanel
{
    private int WIDTH = 800, HEIGHT = 700;
    public GamePanel()
    {

    }
    public Dimension getPerferredSize()
    {
        Dimension size = new Dimension(WIDTH, HEIGHT);
        return size;
    }
    public void paintComponent(Graphics g)
    {
        Graphics2D g2 = (Graphics2D)g;
        g2.setColor(Color.red);
        g2.fillRect(0, 0, WIDTH, HEIGHT);
    }
}

Мне нужна большая красная область 800x700, но я получаю:

JFrame window with the wrong size

Красный цвет слишком мал, а не 800x700, который яокрашена. Мне просто интересно, как я могу сделать его нужного размера.

спасибо.

...