2012-05-14 53 views
0

我有這個類作爲我的問題的一個例子。滾動窗格的不滾動,而且我看不到一個很好的理由:Java:爲什麼這個滾動條不滾動?

import java.awt.Dimension; 

import javax.swing.JOptionPane; 
import javax.swing.JScrollPane; 
import javax.swing.JTextArea; 


public class DoesNotScroll{ 

    public static void main(String[] args){ 
     String str = "this\n\nshould\n\n\n\nscroll\n\n\nthis is the bottom"; 
     message("test", str, JOptionPane.INFORMATION_MESSAGE); 
    } 

    public final static void message(String title, String message, int messageType){ 
     JTextArea messageArea = new JTextArea(); 
     messageArea.setMinimumSize(new Dimension(300, 100)); 
     messageArea.setMaximumSize(new Dimension(300, 100)); 
     messageArea.setPreferredSize(new Dimension(300, 100)); 
     messageArea.setEditable(false); 
     JScrollPane scroller = new JScrollPane(messageArea); 
     scroller.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); 
     scroller.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); 
     messageArea.setText(message); 
     messageArea.revalidate(); 
     messageArea.repaint(); 
     JOptionPane.showMessageDialog(null, scroller, title, messageType); 
    } 
} 

任何幫助表示讚賞,

-C

回答

3

與我的設置這裏的問題是,我是呼叫messageArea.setPreferredSize()而不是scroller.setPreferredSize()。一旦我將調整大小的方法從messageArea中調用並將它們添加到滾動條,滾動條就可見。我不知道爲什麼這種方式的工作方式,但如果我弄清楚,我會更新這個答案。如果其他人知道,這裏的評論將不勝感激。

+0

這不是解決方案。看到我的答案。 –

2

與我的設置這裏的問題是,我打電話messageArea.setPreferredSize()代替scroller.setPreferredSize()

無需調用任意表示這種情況下的一個問題。通過在構造函數中提供列/行大小來設置文本區域的'首選大小'。將它添加到滾動窗格中。任務完成。

import javax.swing.*; 

public class DoesScroll { 

    public static void main(String[] args){ 
     String str = "this\n\nshould\n\n\n\nscroll\n\n\nthis is the bottom"; 
     message("test", str, JOptionPane.INFORMATION_MESSAGE); 
    } 

    public final static void message(String title, String message, int messageType){ 
     JTextArea messageArea = new JTextArea(3,20); 
     messageArea.setEditable(false); 
     JScrollPane scroller = new JScrollPane(messageArea, 
      JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, 
      JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); 
     messageArea.setText(message); 
     JOptionPane.showMessageDialog(null, scroller, title, messageType); 
    } 
} 
+1

@Chris Drappier:更多詳情[here](http://stackoverflow.com/q/7229226/230513)。 – trashgod