我需要在程序中显示两个文件。我需要使用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);
}
重申:
答案 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大小。