увеличить высоту JPanel с ее содержимым - PullRequest
0 голосов
/ 01 ноября 2011

У меня есть образец панели, в которой есть другой компонент, в моем случае JTextArea. Я хочу увеличить высоту панели по мере увеличения высоты JTextArea с фиксированной шириной. Я установил фиксированную ширину для панели.

public class Panel extends JPanel {

    public Panel() {
        setPreferredSize(new Dimension(300, 85));
        setLayout(new BorderLayout());
        JPanel pic = new JPanel(new FlowLayout(FlowLayout.LEFT));
        pic.setBackground(Color.GRAY);
        pic.add(new JLabel(new ImageIcon("img/icon.png")));




        JPanel status = new JPanel(new FlowLayout(FlowLayout.LEFT));
        status.setBackground(Color.GRAY);

        JTextArea textArea = new JTextArea();

        String text = "The quick brown fox jumps over the lazy dog. "
                + "The quick brown fox jumps over the lazy dog. "
                + "The quick brown fox jumps over the lazy dog. "
                + "The quick brown fox jumps over the lazy dog. "
                + "The quick brown fox jumps over the lazy dog. "
                + "The quick brown fox jumps over the lazy dog. "
                + "The quick brown fox jumps over the lazy dog.";
        textArea.setText(text);
        textArea.enable(false);

        textArea.setLineWrap(true);
        textArea.setWrapStyleWord(true);
        add(textArea);
        status.add(textArea);

        add(pic, BorderLayout.WEST);
        add(status, BorderLayout.CENTER);

        setBorder(BorderFactory.createEtchedBorder());
    }

    public static void main(String[] args) {
        JFrame f = new JFrame("Panel Test");

        f.add(new Panel());

        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.pack();
        f.setVisible(true);
    }
}

И я не хочу полосу прокрутки для JTextArea. Я хочу, чтобы он занимал столько же высоты, сколько требуется для полного просмотра его содержимого.

1 Ответ

4 голосов
/ 01 ноября 2011

Предпочтительный размер текстовой области не может быть определен, если не известен размер текстовой области. То есть перенос текста не может быть выполнен до тех пор, пока ширина области текста не станет известна. Поэтому вам нужно задать ширину текстовой области.

Кроме того, вы не можете задать предпочтительный размер панели, так как это лишит цели использования pack ();

// setPreferredSize(new Dimension(300, 85));
...
textArea.setText(text);
textArea.setSize(300, 1);
...