Java BoxLayout неправильно выравнивает настроенный JButton - PullRequest
0 голосов
/ 29 апреля 2019

Я создаю игру, используя Java Swing, и возникает проблема в дизайне экрана «Game Over», который использует BoxLayout.

Итак, я выровнял по вертикали две JLabels с простыми сообщениями, и яЯ пытаюсь добавить еще одну "Play Again" JButton прямо ниже.(Вверху, на уровне JFrame, я использую BorderLayout.)

Я настроил JButton с загруженным ImageIcon (больше, чем размеры по умолчанию), но экран печатается как скриншот ниже:

enter image description here

Что может быть не так с моей реализацией?Это выглядит следующим образом:

    //initialize the game over screen
    JPanel overPanel = new GameOverScreen();
    overPanel.setLayout(new BoxLayout(overPanel, BoxLayout.Y_AXIS));
    JLabel message = new JLabel("Game Over!");
    JLabel finalScore = new JLabel("Score: " + game.getScore());

    //Play again button
    JButton again = new JButton(new ImageIcon("files/again.jpg"));
    again.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            newGame();
        }
    });

    again.setPreferredSize(new Dimension(450, 100));
    again.setMargin(new Insets(0, 0, 0, 0));
    again.setBorder(null);

    //manage center alignments and add to JPanel
    message.setAlignmentX(Component.CENTER_ALIGNMENT);
    finalScore.setAlignmentX(Component.CENTER_ALIGNMENT);

    overPanel.add(Box.createVerticalStrut(250)); //invisible spacers
    overPanel.add(message);
    overPanel.add(finalScore);
    overPanel.add(Box.createVerticalStrut(50));
    overPanel.add(again);

    add(overPanel, BorderLayout.CENTER); //this is in a JFrame extended class
...