2012-03-08 82 views
0

我已經創建了一個textarea,並且我需要一個應用於textarea的滾動條,當需要的時候(當文本變得太長而且不能再被讀取時)。Java Textarea ScrollPane

這是我寫的代碼,但由於某種原因,滾動條不真的出現?

final JTextArea textArea = new JTextArea(); 
    textArea.setEditable(false); 
    textArea.setBounds(10, 152, 456, 255); 
    textArea.setBorder(border); 
    textArea.setLineWrap(true); 
    sbrText = new JScrollPane(textArea); 
    sbrText.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); 
    panel_1.add(textArea); 
+0

求神知的原因是什麼第二次:http://stackoverflow.com/questions/9624305/using-a-jscrollpane-with-a-jtextarea – 2012-03-08 20:37:19

回答

1
  • 您必須刪除代碼行,使JTextArea在屏幕上有絕對的尺寸,因爲使用setBounds()。這使得它不可調整大小JScrollPane只有在其內容是可調整大小時纔有效。

    // wrong 
    textArea.setBounds(10, 152, 456, 255); 
    
  • 請仔細閱讀JTextAreaJScrollPane教程;請運行這兩個教程中的示例。

+0

你是什麼意思?你的意思是我需要擺脫最後?我的textarea必須是最終的,因爲我稍後在代碼中使用它,代碼稍後需要textarea纔是最終的。有什麼辦法,我可以保持最終狀態並添加一個滾動條? – Pita 2012-03-08 20:08:01

0

您將TextArea添加到父項兩次(scrollPane和panel)。 你的最後一行更改爲

panel_1.add(sbrText); 
+0

我試過了,但是textarea不再可用在框架上了嗎? – Pita 2012-03-08 20:09:05

+0

您的示例代碼中沒有框架。但對我而言,這是有效的。也許你必須改變面板的佈局。 – 2012-03-08 20:17:02

+0

嗯,我有一個框架和東西,因此它不工作你的代碼。 – Pita 2012-03-08 20:17:45

1

看到這個

import javax.swing.*; 

    public class TestFrame extends JFrame 

{ 
    JTextAreaWithScroll textArea; 

    public TestFrame() 
    { 
     super ("Test Frame"); 

     setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); 
     setSize (300, 300); 

     textArea = new JTextAreaWithScroll (JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, 
              JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); 

     add (textArea.getScrollPane()); 
    } 

    public static void main (String[] args) 
    { 
     SwingUtilities.invokeLater (new Runnable() 
     { 
      public void run() 
      { 
       TestFrame f = new TestFrame(); 
       f.setVisible (true); 
      } 
     }); 
    } 
} 


class JTextAreaWithScroll extends JTextArea 
{ 
    private JScrollPane scrollPane; 

    public JTextAreaWithScroll (int vsbPolicy, int hsbPolicy) 
    { 
     scrollPane = new JScrollPane (this, vsbPolicy, hsbPolicy); 
    } 

    public JScrollPane getScrollPane() 
    { 
     return scrollPane; 
    } 
} 

http://forum.html.it/forum/showthread/t-1035892.html

+1

這依賴於框架的內容窗格,該窗格具有默認的「BorderLayout」和默認目的地「CENTER」。 – trashgod 2012-03-08 20:46:45

0

確保preferredSizeviewportSize是相同的。如果文本區域的首選大小足以顯示其自身,則滾動窗格的大小將自動調整爲textArea的首選大小,並且這可能導致滾動條消失。

請再次閱讀JTextAreaJScrollPane教程。

textArea.setPreferredSize(new Dimension(456, 255)); 
textArea.setPreferedScrollableViewportSize(new Dimension(456, 255));