Java - JLabel с не выровненным значком (идет вправо)

1

Я пытаюсь сделать диспетчер колоды для карточной игры (Yu-Gi-Oh: D), и на данный момент у меня есть таблица с доступными картами и панель, в которой показана карта, выбранная пользователем в большем размере, и с описание карты. MVCE:

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

    public class SelectedCardPanel extends JPanel{
        private final JLabel cardArea;
        private final JTextArea cardInfo;

        public static void main(String args[]){
            java.awt.EventQueue.invokeLater(new Runnable() {
                @Override
                public void run() {
                    JFrame frame = new JFrame("Yu-Gi-Oh!");
                    frame.add(new SelectedCardPanel());
                    frame.pack();
                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    frame.setVisible(true);
                }
            });
        }

        public SelectedCardPanel(){
            super();

            setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
            setPreferredSize(new Dimension(200, 400));

            cardArea = new JLabel("                                 ");
            cardArea.setOpaque(true);
            cardArea.setBackground(Color.white);
            cardArea.setPreferredSize(new Dimension(200, 300));
            cardArea.setSize(cardArea.getPreferredSize());
            cardArea.setBorder(BorderFactory.createLineBorder(Color.black));

            cardInfo = new JTextArea();
            cardInfo.setEditable(false);
            cardInfo.setWrapStyleWord(true);
            cardInfo.setLineWrap(true);
            cardInfo.setPreferredSize(new Dimension(200, 100));
            cardInfo.setBorder(BorderFactory.createLineBorder(Color.black));

            add(cardArea);
            add(cardInfo);
        }

        public final void setImage(ImageIcon icon){
            cardArea.setIcon(icon);
        }
    }

Но что происходит: Изображение 174551 В MVCE:

Изображение 174551

CardArea попадает вправо, и я не понимаю, почему.

Карта, которую я выбираю в таблице, без проблем попадает на выбранную панель карты. Почему JLabel попадает вправо?

  • 0
    Чтобы быстрее помочь, опубликуйте MCVE (Минимальный завершенный и проверяемый пример).
  • 2
    "Я не знаю, можно ли задавать эти два вопроса на одном и том же посте" Ух ты! Вы задали два вопроса в посте, в котором не было ни одного «?»! ..Кем они были?
Показать ещё 3 комментария
Теги:
swing
jlabel
jtable

1 ответ

1
Лучший ответ

Проблема с BoxLayout. Вместо этого я рекомендовал бы использовать BorderLayout и избавиться от всех set[Preferred]Sizes. Что касается текстовой области, используйте конструктор JTextArea(rows, cols). Для столбцов, которые вы можете оставить в 0, и с BorderLayout, он будет растягиваться в соответствии с шириной изображения

Изображение 174551

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

public class SelectCardPanel extends JPanel{
    private final JLabel cardArea;
    private final JTextArea cardInfo;

    public static void main(String args[]){
        java.awt.EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                JFrame frame = new JFrame("Yu-Gi-Oh!");
                SelectCardPanel panel = new SelectCardPanel();
                panel.setImage(new ImageIcon(SelectCardPanel.class.getResource("images.jpg")));
                frame.add(panel);
                frame.pack();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setVisible(true);
            }
        });
    }

    public SelectCardPanel(){
        super();

        setLayout(new BorderLayout());
        //setPreferredSize(new Dimension(200, 400));

        cardArea = new JLabel();
        cardArea.setOpaque(true);
        cardArea.setBackground(Color.white);
        //cardArea.setPreferredSize(new Dimension(200, 300));
        //cardArea.setSize(cardArea.getPreferredSize());
        cardArea.setBorder(BorderFactory.createLineBorder(Color.black));

        cardInfo = new JTextArea(5, 0);
        cardInfo.setEditable(false);
        cardInfo.setWrapStyleWord(true);
        cardInfo.setLineWrap(true);
        //cardInfo.setPreferredSize(new Dimension(200, 100));
        cardInfo.setBorder(BorderFactory.createLineBorder(Color.black));

        add(cardArea);
        add(cardInfo, BorderLayout.PAGE_END);
    }

    public final void setImage(ImageIcon icon){
        cardArea.setIcon(icon);
    }
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню