Мои JTextArea не учитывают размер компонента и обрезаются - PullRequest
2 голосов
/ 15 февраля 2020

Я работал над этим часами. Я честно не могу понять это. У меня есть JTextArea внутри JSplitPane, которая находится внутри JPanel с JButton и всего, что помещено в мой JFrame. Я использую менеджеры по расположению. Я попытался с помощью pack (). Я пытался использовать предпочтительные размеры. Без JPanel моя кнопка не отображается в нужном месте и не переключается на других вкладках. С помощью JPanel он обрезает весь мой текст, останавливает функцию прокрутки (да, я пытался установить для TextAreas всегда горизонтальные и вертикальные полосы прокрутки ... не решает проблему, когда текст просто прекращает перенос без видимой причины).

public static void main(String[] args) throws IOException
{
    JFrame frame = new JFrame();

    Deck blackjack = new Deck(Deck.TYPE[0]);

    JTextArea textBlackjackUnshuffled = new JTextArea();
    JTextArea textBlackjackShuffle = new JTextArea();

    JButton shuffleButtonBlackjack = new JButton(new ImageIcon(ImageIO.read(new File("res/shuffle.png"))));

    JToolBar toolBarBlackjack = new JToolBar("Blackjack");

    JSplitPane splitPaneBlackjack = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);

    JPanel panel = new JPanel();

    JTabbedPane tabbedPaneBlackJack = new JTabbedPane();
    JTabbedPane tabbedPaneCanasta = new JTabbedPane();
    JTabbedPane tabbedPanePinochle = new JTabbedPane();

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setLayout(new BorderLayout());


    textBlackjackUnshuffled.setColumns(10);
    textBlackjackUnshuffled.setLineWrap(true);
    textBlackjackUnshuffled.setWrapStyleWord(true);
    textBlackjackUnshuffled.setEditable(false);
    textBlackjackUnshuffled.setFont(new Font("DejaVu Sans", Font.PLAIN, 100));
    textBlackjackUnshuffled.append(blackjack.toString());

    textBlackjackShuffle.setColumns(10);
    textBlackjackShuffle.setLineWrap(true);
    textBlackjackShuffle.setWrapStyleWord(true);
    textBlackjackShuffle.setEditable(false);
    textBlackjackShuffle.setFont(new Font("DejaVu Sans", Font.PLAIN, 100));
    textBlackjackShuffle.append(blackjack.toString());

    shuffleButtonBlackjack.setBorderPainted(false);
    shuffleButtonBlackjack.setFocusPainted(false);
    shuffleButtonBlackjack.setContentAreaFilled(false);

    splitPaneBlackjack.add(new JScrollPane(textBlackjackUnshuffled));
    splitPaneBlackjack.add(new JScrollPane(textBlackjackShuffle));

    panel.add(splitPaneBlackjack, BorderLayout.CENTER);
    panel.add(shuffleButtonBlackjack, BorderLayout.PAGE_END);

    tabbedPaneBlackJack.addTab("Blackjack", panel);

    frame.add(tabbedPaneBlackJack);
    frame.setSize(new Dimension(Toolkit.getDefaultToolkit().getScreenSize()));
    frame.setVisible(true);
}

1 Ответ

2 голосов
/ 15 февраля 2020

Вы добавляете JScrollPanes на панель в позициях BorderLayout, но не установили для менеджера компоновки панели значение BorderLayout. В этой ситуации на панели будет использоваться менеджер компоновки JPanel по умолчанию FlowLayout, менеджер которого недостаточно умен, чтобы соответствовать предпочтительным размерам панели прокрутки.

Для вашего кода необходимо:

panel.setLayout(new BorderLayout());
...