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

ложении я использую нередактируемые JEditorPanes в качестве своего рода универсального виджета пользовательского интерфейса, который может отображать довольно сложное содержимое (HTML поможет), обтекать строки текста и ловить щелчки мышью. Не уверен, что JEditorPane - хороший выбор для этого, поэтому не стесняйтесь предлагать альтернативы.

Следующий пример кода работает довольно хорошо:

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;

import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ScrollPaneConstants;

public class Main {

  private static JPanel createPanel() {
    JPanel panel = new JPanel();
    panel.setLayout(new GridBagLayout());

    for (int i = 0; i < 3; i++) {
      JEditorPane editorPane = new JEditorPane();
      editorPane.setEditable(false);
      editorPane.setContentType("text/html");

      String text =
        "This is <b>item #" + i + "</b>." +
        " It's got text on it that should be wrapped."
      ;

      editorPane.setText(text);

      GridBagConstraints constraints = new GridBagConstraints();
      constraints.gridx = 0;
      constraints.gridy = i;
      constraints.fill = GridBagConstraints.HORIZONTAL;
      constraints.weightx = 1.0;
      constraints.insets.bottom = 5;

      panel.add(editorPane, constraints);
    }

    return panel;
  }


  public static void main(String[] args) {
    JPanel panel = createPanel();

    JFrame frame = new JFrame();
    frame.setSize(200, 200);
    frame.setLocation(200, 200);

    // Change this to switch between examples
    boolean useScrollPane = false;

    if (useScrollPane) {
      JScrollPane scrollPane = new JScrollPane();
      scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
      scrollPane.setViewportView(panel);
      frame.add(scrollPane);
    }
    else {
      frame.add(panel);
    }

    frame.setVisible(true);
  }

}

и производит следующее:

Тем не менее, у меня их может быть много, и я могу использовать вертикальную полосу прокрутки.

Так что я положил все это в JScrollPane (изменитьuseScrollPane переменная кtrue в примере кода, чтобы увидеть эту версию).

Это дает мне вертикальную полосу прокрутки, если я уменьшаю высоту окна, но проблема в том, что теперь текст больше не переносится:

Итак, вопрос: как я могу получить как перенос текста, так и вертикальную полосу прокрутки?

Как видите, я отключил горизонтальную полосу прокрутки, но это не сильно помогло.

PS. У меня нет большого опыта работы с Swing, поэтому, если вы видите в этом коде несколько WTF для начинающих, укажите их :)

Ответы на вопрос(2)

Ваш ответ на вопрос