2014-02-19 68 views
0

這可能是一個奇怪的問題,所以我請求你們在這件事上忍受我。很多信息的框架

我想將信息提供給JFrame。特別是String

下面是捕捉,這是一個非常長的String。像,英里。總共想幾十行信息。

它有點像電話簿,名稱多於可能適合頁面的名稱,並且只有一個頁面可供使用。

所以我在想滾動條。

我想:

JTextArea area = new JTextArea(veryLongText.toString()); 
    JScrollPane scrollPane = new JScrollPane(area); 

但沒有工作,因爲直到我加入了更多的文字我不能向下滾動。這不是我想要的。

簡而言之,我想要一個可以滾動的文本框,如果窗口太小而不適合其中的所有文本。

我該怎麼做呢?

回答

5

嘗試將其設置爲允許換行...

JTextArea area = new JTextArea(veryLongText.toString()); 
area.setLineWrap(true); 

設置文本區的換行策略。如果設置爲true,則 線條將被纏繞,如果它們太長以至於不足以分配到所分配的 寬度。如果設置爲false,則線條將始終展開。 A 更改策略時觸發PropertyChange事件(「lineWrap」)。 默認情況下,此屬性爲false。

使用單詞邊界甚至可以包...

area.setWrapStyleWord(true); 

設置如果文本區要換行包裝使用的樣式。如果 設置爲true,則行將纏繞在單詞邊界(空白) ,如果它們太長而不適合分配的寬度。如果設置爲 爲false,則這些行將被包裝在字符邊界處。默認 這個屬性是錯誤的。

一般情況下,我建議雙方

看看的JTextArea JavaDocsHow to use text areas瞭解更多詳情...

+0

這就是我正在尋找(儘管不知道這是),謝謝你,朋友! – ViRALiC

+0

文字環繞的好處。 – MirroredFate

+1

歡迎來到森林,注意樹木;) – MadProgrammer

3

您的右側曲目是JScrollPane。我強烈建議你看看JScrollPane tutorial

簡而言之,你將要使用下面的代碼:

//In a container that uses a BorderLayout: 
textArea = new JTextArea(5, 30); 
... 
JScrollPane scrollPane = new JScrollPane(textArea); 
... 
add(scrollPane, BorderLayout.CENTER); 

這意味着一切都在你的textArea將滾動。如果更合適,您可以用JPanel替換。

+0

@AndrewThompson這實際上是從Oracle文檔複製粘貼。但我會刪除它,因爲我同意。 – MirroredFate

+0

哦對!我記得現在的鏈接。那麼,糾正我的疏忽.. –

+0

上面的代碼片段糾正了它引用的官方教程中的問題。 +1請參閱[我是否應避免使用Java Swing中的set(Preferred | Maximum | Minimum)大小方法?](http://stackoverflow.com/q/7229226/418556)(是) –

4

這是一個有點像電話簿,與更多的名字比你所能配合的頁面

上我會在JScrollPane推薦JListJTable

有關更多詳細信息,請參閱您最喜愛的搜索引擎中的'如何使用X',其中'x'是上述三者中的任何一個。

+1

+1非常好的建議! – MadProgrammer

+0

我很失望,你刪除了你的評論,因爲它是一個相關的鏈接,特別是對於任何決定使用oracle教程的人。 – MirroredFate

+0

@AndrewThompson對不起,評論我的答案。我在這之前評論過我的回答。 – MirroredFate

3

聽起來好像你沒有足夠的文本來滾動它。你的解決方案似乎是正確

也許你想滾動條總是在那裏,使用其他的構造函數:JScrollPane(Component, int, int)與從ScrollPaneConstants常量。

+0

*「也許你希望滾動條總是在那裏..」* E.G.正如在[這個答案](http://stackoverflow.com/a/21849351/418556)中所看到的那樣,它總是聲明水平條,垂直條永遠不會。 –

1

我有一種感覺,你的字符串是一個非常非常長的行。它有任何新的線條字符嗎?即「\ n」?

安美居,這裏的作品

// 
// Test ScrollPane with very very long string 
// 
package testjscrollpane; 
import javax.swing.*; 

public class TestJScrollPane extends JFrame 
{ 
    public TestJScrollPane() 
    { 
     //Create a long long string 
     String s = ""; 
     int n = 0; 
     for (int i=0; i<10000; i++) 
     { 
      s += Integer.toString(i)+" "; 

      //this next part breaks the string up into lots of lines 
      //if commentted out, the whole string will appear on 1 line 
      //with no vertical scrollbar 
//   n++; 
//   if(n==100) 
//   { 
//    s += "\n"; 
//    n = 0; 
//   } 
     } 

     this.setDefaultCloseOperation((JFrame.EXIT_ON_CLOSE)); 
     this.setSize(400, 400); 

     JTextArea area = new JTextArea(s); 
     JScrollPane scrollpane = new JScrollPane(area); 
     this.add(scrollpane); 

     this.setVisible(true); 
    } 

    public static void main(String[] args) 
    { 
     TestJScrollPane myFrame = new TestJScrollPane(); 
    } 

} 

好運的例子!

+2

支持換行和換行是由'JTextArea'提供的......它會自動考慮字體指標等事情...... – MadProgrammer

+0

我會爲此付諸流水,但是當我嘗試沒有發生任何換行時。我猜這不是默認情況下,OP給我們的兩行沒有提及打開它們。我仍然在賭他的滾動窗格顯示1真的很長的一行,因爲它沒有任何新的行字符。 – Roy

+0

換行不應該(從我的可憐的記憶中)與白色空間的關聯... – MadProgrammer