Я использую JEditorPane
внутри JPanel
, который я назвал своим contentPane
в приведенном ниже примере. Область содержимого находится внутри JScrollPane
. Я бы хотел, чтобы панель редактора заполнила как можно меньше места (просто чтобы содержать текст), а остальная часть пространства, доступного на панели содержимого, оставлена пустой донизу и с обеих сторон. Если текст становится слишком большим, область редактора будет расти, и в итоге панель прокрутки создаст полосы прокрутки для просмотра всего содержимого. Однако вместо панели редактора, занимающей только предпочтительный размер (который представляет собой размер содержащегося в нем текста), он заполняет всю область содержимого, которая заполняет весь порт представления области прокрутки. Вот пример кода, чтобы продемонстрировать мою проблему:JEditorPane заполняет все свободное пространство в JScrollPane
import java.awt.BorderLayout;
import java.awt.Color;
import javax.swing.BoxLayout;
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
@SuppressWarnings("serial")
public class ScrollPaneExample extends JFrame {
public static void main(String[] args) {
new ScrollPaneExample();
}
public ScrollPaneExample() {
super("ScrollPaneExample");
setSize(400, 400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new BorderLayout());
JEditorPane editorPane = new JEditorPane("text/plain", "");
editorPane.setBackground(Color.YELLOW);
for (int i = 0; i < 5; i++)
editorPane.setText(editorPane.getText() + "Hello World\n");
JPanel contentPane = new JPanel();
contentPane.setLayout(new BoxLayout(contentPane, BoxLayout.Y_AXIS));
contentPane.setBackground(Color.BLUE);
contentPane.add(editorPane);
JScrollPane scrollPane = new JScrollPane(contentPane);
add(scrollPane, BorderLayout.CENTER);
setVisible(true);
}
}
При запуске, это то, что окно выглядит следующим образом:
На желтом фоне, мы можем видеть, что панель редактора принимает все пространство. Вот (Photoshopped) пример того, что я хочу, чтобы макет выглядеть следующим образом:
Синий фон представляет собой область содержимого, а желтый представляет собой панель редактора.
Редактировать: В моей рабочей программе в редакторе contentPane
имеется больше, чем просто панель редактора. Вот почему я использую BoxLayout
вместо FlowLayout
для contentPane
; потому что требуется вертикальная компоновка потока страниц.
Как размер будет определяться? Вы хотите, чтобы этот точный размер (что означает, что он соответствует пяти мирам приветствия)? Вы хотите, чтобы он был определенного размера? Вы хотите, чтобы размер был основан на динамическом тексте? –
@peeskillet Панель редактора должна динамически изменять размер на основе текста. Для ввода любого текста. –
Вы хотите, чтобы вид в области прокрутки был динамически изменен (так что в целом вся панель прокрутки - какая-то победа над областью прокрутки)? Или вид остаться, но свитки добавлены? В последнем случае, что определить начальный размер, содержание пяти миров приветствия? –