2013-11-15 109 views
1

我對Java GUI和佈局不是很熟悉,但我必須承認,我不認爲這會是棘手的!我不太確定我在這裏做什麼。JScrollPane無法在我的JTextArea上工作?

我只想添加2個textareas ontop的對方,並添加jscrollpane到他們每個人。但是我無法讓JScrollPanes工作。這是我目前如何得到它的。

public class Class extends JFrame { 

    public Class() { 
    super("Title"); 

    getContentPane().setLayout(
      new BoxLayout(getContentPane(), BoxLayout.Y_AXIS)); 
    setResizable(false); 

    JTextArea window1 = new JTextArea("text"); 
    window1.setEditable(false); 
    window1.setBorder(BorderFactory.createLineBorder(Color.BLACK)); 
    window1.setPreferredSize(new Dimension(200, 250)); 
    window1.setLineWrap(true); 

    add(window1); 

    JScrollPane scroll = new JScrollPane(window1); 
    scroll.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); 
    scroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); 

    add(scroll); 

    JTextArea window2 = new JTextArea(); 
    window2.setEditable(true); 
    window2.setBorder(BorderFactory.createLineBorder(Color.BLACK)); 
    window2.setPreferredSize(new Dimension(100, 50)); 
    window2.setLineWrap(true); 
    add(window2); 

    setDefaultCloseOperation(EXIT_ON_CLOSE); 
    pack(); 
    setVisible(true); 
} 
} 

它看起來不錯,有一個「文本」框,它的右邊有滾動窗格。在它們下面都有第二個JTextArea(沒有滾動窗格)。問題是,當我在窗口1中寫入文本並且文本在jtextarea之外的文本下方時,我期望JScrollPane實際上是可滾動的,所以我可以向下滾動以查看底部的文本,但是當我按下它時沒有任何反應(它的大小或者任何東西都不會改變)。我錯過了什麼?

回答

2

您添加JTextAreaJScrollPane你不必將它添加到您的JFramesetPreferedSize()用於JScrollPane,而不是直接用於JTextArea,因爲您的JTextArea將不可滾動。我已更改您的代碼,請嘗試以下操作:

public class Class extends JFrame { 
    public Class() { 
     super("Title"); 

     getContentPane().setLayout(
       new BoxLayout(getContentPane(), BoxLayout.Y_AXIS)); 
     setResizable(false); 

     JTextArea window1 = new JTextArea("text"); 
     window1.setEditable(false); 
     window1.setBorder(BorderFactory.createLineBorder(Color.BLACK)); 
     window1.setLineWrap(true); 


     JScrollPane scroll1 = new JScrollPane(window1); 
     scroll1.setPreferredSize(new Dimension(200, 250)); 
     scroll1.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); 
     scroll1.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); 
     add(scroll1); 

     JTextArea window2 = new JTextArea(); 
     window2.setEditable(true); 
     window2.setBorder(BorderFactory.createLineBorder(Color.BLACK)); 
     window2.setLineWrap(true); 
     add(window2); 

     JScrollPane scroll2 = new JScrollPane(window2); 
     scroll2.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); 
     scroll2.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); 
     scroll2.setPreferredSize(new Dimension(100, 50)); 
     add(scroll2); 

     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     pack(); 
     setVisible(true); 
    } 

    public static void main(String... s){ 
     new Class(); 
    } 
} 
+0

是的,謝謝,在JScrollPane上使用setPreferredSize而不是JTextArea,現在一切順利! – optional

2

的問題是,當我寫在窗口1文本和文本去 下面的JTextArea中之外,我預計JScrollPane中以 實際上是滾動


JTextArea一直包括到JScrollPane。您不應該添加window1

add(window1);// Remove this. 

JScrollPane scroll = new JScrollPane(window1);//here you added window1 
add(scroll);// This statement also added the JTextArea 
      //and do the operaton of above add. 
+0

不知道這個確實如此......但不幸的是,它沒有解決問題(這就是爲什麼其他答案已被接受爲正確答案;應該在JScrollPane上使用setPreferredSize()而不是JTextArea來解決問題)! – optional

+0

@optional,爲什麼我會提及支持已提及的問題? – Masudul