2013-09-22 70 views
0

好吧,我正在嘗試創建一個具有JScrollPane的GUI,它通過JTextArea將一次一行地打印出一列整數。我正在使用一些爲賦值處理數據而創建的方法,並在下面的示例中使用其中一個方法處理數據(我無法顯示方法,因爲它是尚未到期的作業)。這些方法已經過測試並且工作正常,所以在這個問題中不需要它們。到目前爲止,文本區域將顯示在GUI中,但沒有附加滾動窗格,或者只有jlabel會顯示通過該方法完成的工作結果。有人可以看看我的代碼,並告訴我我做錯了什麼,因爲我已經過去了50次,並且無法讓GUI運行。JScrollPane無法在GUI中工作

public class MyClassName extends JFrame{ 

private JScrollPane myScroll; 
private JTextArea myTextArea; 
private JLabel myMean; 
private JLabel myMedian; 
private JLabel myMax; 
private JLabel myMin; 
private JLabel mySum; 
private Container content; 
private Font myFont; 
private SpringLayout layout; 


private MyClassName() { 
    this(500,300,"TEST TITLE"); 
} 

private MyClassName(int width, int height, String title) 
{ 
    this.setVisible(true); 
    this.setTitle(title); 
    this.setSize(width, height); 
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    guiComponent(); 
} 

public void guiComponent() 
{ 
    layout = new SpringLayout(); 
    content = this.getContentPane(); 

    int [] test = {50,37,43,12,8,16,32,44,78,92,1,3,66,34}; 

    myTextArea = new JTextArea(); 

    myScroll = new JScrollPane(myTextArea); 
    content.add(myScroll); 

    myMean = new JLabel("MEAN : " + MyClassName.mean(test)); 
    for(int count : test) 
    { 
     String z = Integer.toString(count); 
     myTextArea.append('\n' + z); 
    } 

    myFont = new Font("Serrif", Font.BOLD, 30); 
    myMean.setFont(myFont); 

    content.add(myScroll); 
    layout.putConstraint(SpringLayout.WEST, myScroll, 20, SpringLayout.WEST, content); 
    layout.putConstraint(SpringLayout.NORTH, myScroll, 25, SpringLayout.NORTH, content); 

    content.add(myMean); 
    layout.putConstraint(SpringLayout.WEST, myMean, 20, SpringLayout.EAST, myScroll); 
    layout.putConstraint(SpringLayout.NORTH, myMean, 25, SpringLayout.NORTH, content); 
} 

public static double mean(int[] ar) { 
    double x = 0; 
    for (int i = 0; i < ar.length; i++) { 
     x += ar[i]; 
    } 
    return x/ar.length; 
} 

public static void main(String[] args) { 

    MyClassName test2 = new MyClassName(); 
} 
+1

考慮添加一個'public static void main(String args [])'作爲[SSCCE](http://www.sscce.org),以便人們可以複製粘貼並測試您的代碼。 – nachokk

+0

我添加了main和我在這個例子中使用的1方法 –

+0

OK,所以我重新啓動了netbeans,現在它在GUI中彈出了文本區域和滾動窗格,但它們佔用了整個GUI,即使添加了大小參數到文本區域,而jlabel應該在文本區域的右側,仍然不存在 –

回答

4

你的問題,當你需要顯示在佈局中的組件,來解決問題初始化「myTextArea」組件後,添加這三個行:

myTextArea.setColumns(20); 
myTextArea.setRows(5); 
getContentPane().setLayout(layout); 

你也許需要閱讀本link about Layout

+0

太棒了!至少修復了scrollPanel問題。除非您抓住GUI窗口的一個角並移動它,否則JLabel仍然不會彈出它,不知道爲什麼會發生這種情況? –

+0

其實,我讀了你給我的鏈接的信息,只是用了.isVisible();現在它顯示,所以再次感謝! –

+0

實際上,不,也沒有用,jlabel只會在你第一次運行程序時彈出,之後它看起來好像消失了,這真的很奇怪 –