Явное приложение, которое я создаю, использует структуру Swing. Я новичок в Swing, и я пытаюсь отобразить текст из файла. Проблема в том, что не весь мой текст отображается с использованием кода ниже - он отключается.Swing JPanel Изменение размера: не соответствует содержимому текстового файла - вырезает текст
Код
До сих пор я создал компонент JFrame, чтобы содержать все:
//initial frame that holds everything
frame = new JFrame(WINDOW_NAME);
frame.setSize(new Dimension((SCREEN_WIDTH.intValue()/100)*80, (SCREEN_HEIGHT.intValue()/100)*80));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
В пределах этого я создал панель прокрутки, чтобы позволить пользователю прочитать содержимое текстового файла с помощью прокрутки по вертикали; это довольно большой текстовый файл - несколько глав из книги.
JScrollPane scrollPane = new JScrollPane(contentPane);
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
scrollPane.setWheelScrollingEnabled(true);
frame.setContentPane(scrollPane);
Область прокрутки содержит объект JPanel. Для этого я использовал диспетчер компоновки GridBagLayout. Сама панель содержит редакторскую панель, которую я создал с URL-адресом текстового файла.
JPanel contentPane = new JPanel();
contentPane.setPreferredSize(new Dimension(frame.getWidth(), frame.getHeight()));
buildAndAddComponentsToFrame(contentPane);
private void buildAndAddComponentsToFrame(Container container) {
container.setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.fill = GridBagConstraints.BOTH;
c.gridx = 0;
c.gridy = 0;
c.weightx = 1.0;
c.weighty = 1.0;
c.insets = new Insets((frame.getHeight()/100)*10, (frame.getWidth()/100)*10, (frame.getHeight()/100)*10, (frame.getWidth()/100)*10);
//create a non-editable editor pane to hold the contents of the religious texts
JEditorPane textContainer = new JEditorPane();
textContainer.setEditable(false);
//TODO load the content of the pane from a URL (local)
File textFile = new File(*my text file*);
try {
textContainer.setPage(textFile.toURI().toURL());
} catch (IOException e) {
e.printStackTrace();
}
container.add(textContainer,c);
}
Это работает - я в состоянии прочитать содержимое файла, но не в полном объеме: это только показывает, что он может поместиться в высоту объекта JPanel. Я не хочу размещать текстовый контент в ScrollPane, но повышаю высоту JPanel относительно содержимого текстового файла.
Есть ли способ достичь этого? Я использовал контейнер, чтобы «текстовая область» выглядела как документ Microsoft Word, а значит, вставки - это документ, документ которого находится в середине jframe - это намеренно.
Спасибо за любую помощь - извините, если мои объяснения были немного расплывчатыми. Я добавил скриншот, чтобы помочь объяснить.
Почему бы не поставить JTextPane в окно просмотра JScrollPane? –
Поскольку я хочу сохранить область белого содержимого в середине кадра - у меня есть другие компоненты, которые нужно добавить вокруг области содержимого, например, панель поиска и т. Д. –
Вы все еще можете это сделать, но просто имейте их вокруг JScrollPane. –