Swing JPanel Resizing:不适合文本文件的内容 - 剪切文本

时间:2016-10-16 20:24:59

标签: java swing layout-manager gridbaglayout

我正在构建的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的高度相对于文本文件的内容。

有没有办法实现这个目标?我使用容器使“文本区域”看起来像一个微软word文档因此插入 - 它看起来像在jframe中间的纸质文档 - 这是故意的。

感谢您的帮助 - 对不起,如果我的解释有点模糊。我添加了一个截图来帮助解释。

screen shot of GUI

1 个答案:

答案 0 :(得分:2)

您正在创建一个JPanel,使用默认的FlowLayout,您将其首选大小强制为某个值,然后想知道为什么当它所持有的JTextPane具有大于的值时它不会变得更大它的大小。对于您在上面犯的错误,不会发生这种情况。

建议:

  • 最好将JTextPane放入JScrollPane,以便不限制JTextPane的大小或首选大小。
  • 否则,如果必须将JTextPane包装在JPanel中,请为其提供一个JPanel,如果其组件展开,它将展开。使用BorderLayout并添加JTextPane BorderLayout.CENTER。然后将其放入JScrollPane的视口中,如果必须约束大小,请执行视口。