Swing JPanel Resizing:不适合文本文件的内容 - 删除文本
Swing JPanel Resizing: won't fit the contents of text file - cuts out text
我正在构建的 java 应用程序使用了 Swing 框架。我是 Swing 的新手,我正在尝试显示文件中的一些文本。问题是使用下面的代码并没有显示我的所有文本 - 它被截断了。
代码
到目前为止,我已经创建了一个包含所有内容的 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 布局管理器。面板本身包含一个 EditorPane,我用文本文件的 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 的高度相对于文本文件的内容。
有什么办法可以实现吗?我已经使用容器使 "text area" 看起来像 Microsoft Word 文档,因此出现了插图 - 它看起来像 jframe 中间的纸质文档 - 这是故意的。
感谢您的帮助 - 如果我的解释有点含糊,请见谅。我添加了一个屏幕截图来帮助解释。
您正在创建一个 JPanel,使用默认的 FlowLayout,您将其首选大小强制设置为某个值,然后想知道为什么当它包含的 JTextPane 中的文本大于其大小时它不会变大。这不会因为您犯的上述错误而发生。
建议:
- 最好将 JTextPane 放入 JScrollPane 中,以免限制 JTextPane 的大小或首选大小。
- 否则,如果您必须将 JTextPane 包装在 JPanel 中,请为其提供一个 JPanel,如果其组件展开,该 JPanel 也会展开。使用 BorderLayout 并添加 JTextPane BorderLayout.CENTER。然后将其放入 JScrollPane 的视口中,如果必须限制大小,请对视口进行限制。
我正在构建的 java 应用程序使用了 Swing 框架。我是 Swing 的新手,我正在尝试显示文件中的一些文本。问题是使用下面的代码并没有显示我的所有文本 - 它被截断了。
代码
到目前为止,我已经创建了一个包含所有内容的 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 布局管理器。面板本身包含一个 EditorPane,我用文本文件的 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 的高度相对于文本文件的内容。
有什么办法可以实现吗?我已经使用容器使 "text area" 看起来像 Microsoft Word 文档,因此出现了插图 - 它看起来像 jframe 中间的纸质文档 - 这是故意的。
感谢您的帮助 - 如果我的解释有点含糊,请见谅。我添加了一个屏幕截图来帮助解释。
您正在创建一个 JPanel,使用默认的 FlowLayout,您将其首选大小强制设置为某个值,然后想知道为什么当它包含的 JTextPane 中的文本大于其大小时它不会变大。这不会因为您犯的上述错误而发生。
建议:
- 最好将 JTextPane 放入 JScrollPane 中,以免限制 JTextPane 的大小或首选大小。
- 否则,如果您必须将 JTextPane 包装在 JPanel 中,请为其提供一个 JPanel,如果其组件展开,该 JPanel 也会展开。使用 BorderLayout 并添加 JTextPane BorderLayout.CENTER。然后将其放入 JScrollPane 的视口中,如果必须限制大小,请对视口进行限制。