2013-04-26 62 views
1

我有一個JTextArea,位於JScrollPane內部,而JScrollPane又位於JPanel內部,並且位於JTabbedPane的Tab內。JTextArea不會顯示在JTabbedPane內部的JPanel

我知道文本被添加到我的JTextArea,但是當我在標籤之間移動時,JTextArea不可見。要閱讀文本,我必須選擇JTextArea中的文本,然後調出JTextArea背景的白色。如果我不選擇,我什麼都看不到。

我試過平時revalidate();repaint()但他們不適合我。下面是一些有問題的代碼:

public void writeLogEntry(Alarm alarm) 
{ 


    String value = "Blah Blah Blah"; 
    logTextArea.append(value); 
    SwingUtilities.getWindowAncestor(contentPane).revalidate(); 
    repaint(); 
    revalidate(); 
    setVisible(true); 
} 

這裏是有關JTextArea中的元素代碼:

JPanel logPnl = new JPanel(); 
logPnl.setLayout(new BorderLayout(10, 10)); 
JScrollPane logScrollPane = new JScrollPane(); 
logScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); 
logTextArea = new JTextArea("blah blah"); 
logTextArea.setBounds(10, 10, 550, 300); 
logTextArea.setEditable(false); 
logScrollPane.add(logTextArea); 
logPnl.add(logScrollPane); 

contentTabs.addTab("Alarms Log", null, logPnl, "View Log"); 
contentPane.add(contentTabs); 

我在做什麼錯?

+1

請發表完整,簡潔充分的工作代碼產生你所描述的問題的例子。 – KyleM 2013-04-26 04:01:12

+0

我認爲這是簡潔的。我可以粘貼整個JTabbedPane代碼,但其他選項卡中的內容並不是真正的問題,並且會在此處引起混亂。據我所知,所有與JTextArea相關的代碼都已發佈。 :( – Ciwan 2013-04-26 04:02:44

+1

我們沒有要求提供整個標籤窗格代碼,我們要求提供[SSCCE](http://sscce.org/),另外,請勿使用setBounds(),請使用合適的佈局管理器 – camickr 2013-04-26 04:04:21

回答

5

您不應該直接將組件添加到滾動窗格。相反,您可以將組件添加到視口中。或者,當您創建滾動面板指定組件和組件將被添加到視你:

//JScrollPane logScrollPane = new JScrollPane(); 
logScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); 
//logTextArea = new JTextArea("blah blah"); 
logTextArea = new JTextArea(5, 40); 
logTextArea.setText("some text"); 
//logTextArea.setBounds(10, 10, 550, 300); 
logTextArea.setEditable(false); 
JScrollPane logScrollPane = new JScrollPane(logTextArea); 
+0

真棒,這是真的。謝謝:)不能相信這是簡單的。 – Ciwan 2013-04-26 04:14:02