在java中向选项卡式窗格添加文本区域

在java中向选项卡式窗格添加文本区域,java,swing,tabs,jtextarea,jtabbedpane,Java,Swing,Tabs,Jtextarea,Jtabbedpane,我有两个文件需要在程序中显示。我需要使用JTabbedPane,每个文件都应该显示在自己的选项卡中。我可以使文本显示在选项卡中,但滚动条不会显示,因此我无法查看文件中的所有信息。如何将滚动条添加到文本区域 我制作了一个方法,创建一个包含文本的面板(这是一个文件)。然后,我创建了另一个包含JTabbedPane的方法,并将该面板添加到选项卡中 面板法: private void makeTextPanel() throws IOException { textPanel = new JPa

我有两个文件需要在程序中显示。我需要使用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。滚动条是否能够滚动浏览所有内容?如果没有,如何设置文本区域的高度以适应文件中的所有内容

您想要滚动条的组件应该始终是JScrollPane的子组件。将textArea和scrollPane添加到tabbedPane可能没有达到您所认为的效果。确保textArea是scrollPane的子级,并仅将scrollPane添加到选项卡窗格中,确保已指定一个布局,指示scrollPane如何占用选项卡窗格中所需的空间

只有当scrollpane决定textArea大于它在给定空间中所能呈现的范围时,它才会自动添加滚动条

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

问题2)文本区域的“首选”高度是滚动窗格用于确定滚动条行为的高度(请参阅)。一切都为你准备好了。如果不是,你会强迫自己考虑字体渲染高度,你在文本中放置多少文本等等。
一般来说,只需将JTextArea放入JScrollPane中,就可以看到所需的行为,而无需对JTextArea大小进行任何“特殊”操作

我将其添加到我的makeTextPanel()方法scrollPane=newJScrollPane(textArea);scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL\u SCROLLBAR\u ALWAYS);frame.add(滚动窗格,BorderLayout.CENTER);滚动条在我设置的高度停止。如何让它滚动浏览整个文件?我设置了文本区域的宽度和高度,以便它覆盖选项卡中的灰色空间。您正在覆盖文本区域组件的首选大小,这反过来又会影响JScrollPane对其滚动条的操作。信任textArea根据它被传递的文本计算它自己的perferred大小,而不是用你自己的静态维度覆盖首选大小。它成功了!我删除了文本区域的大小。现在我遇到了一个新问题:我创建了另一个方法,该方法对另一个文件执行相同的操作,但随后文本区域显示相同的信息。我将lineOfText和inputFile更改为lineOfText2和inputFile2。我认为问题在于我在makeTabbedPane()方法中调用了两个方法,因此它将只显示其中一个文件。关于如何在不同的选项卡中显示这两个文件,有什么想法吗?谢谢(如果我打扰你,很抱歉)我更想看看代码是什么样子。我可以建议您将此问题标记为已回答,然后发布一个新问题,其中包含您现在正在努力解决的代码的SSCE吗?