将文本区域添加到java中的选项卡式窗格

时间:2014-05-12 05:59:31

标签: java swing tabs jtextarea jtabbedpane

我需要在程序中显示两个文件。我需要使用JTabbedPane,每个文件都应该显示在自己的选项卡中。我可以使文本显示在选项卡中,但滚动条不会出现,所以我无法看到文件中的所有信息。如何将滚动条添加到文本区域?

我创建了一个方法来创建一个包含文本的面板(这是一个文件)。然后,我创建了另一个具有JTabbedPane的方法,并将面板添加到选项卡中。

面板方法:

private void makeTextPanel() throws IOException
{
    textPanel = new JPanel();        

    textArea = new JTextArea();
    textArea.setEditable(false);

    //width: 770 height: 1000
    textAreaDimensions = new Dimension(TEXT_AREA_WIDTH, TEXT_AREA_HEIGHT);
    textArea.setPreferredSize(textAreaDimensions);       

    BufferedReader inputFile = new BufferedReader(new FileReader(FILE_ONE));
    String lineOfText = inputFile.readLine();

    while(lineOfText != null)
    {
        textArea.append("\n" + lineOfText);
        lineOfText = inputFile.readLine();
    }

    // Add a scroll bar
    scrollPane = new JScrollPane(textArea);

    // Add the text area and scroll bar to the panel
    textPanel.add(textArea);
    textPanel.add(scrollPane);
}

选项卡式窗格方法:

private void makeTabbedPane() throws IOException
{
    frame = new JFrame("Project");   

    tabbedPane = new JTabbedPane();
    frame.add(tabbedPane, BorderLayout.PAGE_START);

    // add panel to the tab
    makeTextPanel();
    tabbedPane.addTab("Tab 1", textPanel);  

    // dimensions
    frameDimensions = new Dimension(FRAME_WIDTH, FRAME_HEIGHT);
    frame.setPreferredSize(frameDimensions);


    frame.pack();
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
}

重申:

  • 如何使滚动条可见?
  • 我将文本区域的高度设置为1000.滚动条是否可以滚动浏览所有内容?如果没有,我如何设置文本区域的高度以适应文件中的所有内容?

1 个答案:

答案 0 :(得分:1)

您想要滚动条的组件应该始终是JScrollPane的子组件。添加textArea然后将scrollPane添加到tabbedPane可能并不是你想象的那样。确保textArea是scrollPane的子项,并将scrollPane添加到tabbedPane,确保您指定了一个布局,该布局指示scrollPane如何在tabbedPane中占用您想要的空间。

滚动窗格只有在确定textArea大于它可以在给定的空间中渲染时才会自动添加滚动条。

问题1)JScrollPane方法setVerticalScrollBarPolicy()setHorizontalScrollBarPolicy()将允许您强制滚动条始终可见。

问题2)"首选" textArea的高度是scrollPane用于确定滚动条行为的高度(请参阅this example)。这一切都为你照顾。如果没有,你可以强迫自己考虑字体渲染高度,你在textArea中放入多少文本等。

一般来说,只需将JTextArea抛入JScrollPane就可以看到你想要的行为,而不需要做任何事情"特殊"使用JTextArea大小。