2013-04-26 84 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