2013-04-26 2 views
1

У меня есть JTextArea, который находится внутри JScrollPane, который, в свою очередь, находится внутри JPanel и, в свою очередь, находится внутри Tab JTabbedPane.JTextArea не отображается на JPanel внутри JTabbedPane

Я знаю, что текст добавляется в мой 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

+0

Я думал, что это лаконично. Я могу вставить весь код JTabbedPane, но то, что находится внутри других вкладок, на самом деле не проблема, и здесь может возникнуть беспорядок. Насколько мне известно, весь код, связанный с JTextArea, опубликован. :( – Ciwan

+1

Мы не запрашивали весь код панели с вкладками. Мы попросили [SSCCE] (http://sscce.org/). Также не используйте setBounds(). Используйте правильный менеджер макетов. – camickr

ответ

5

Нельзя добавлять компоненты непосредственно в прокрутку. Вместо этого вы добавляете компоненты в область просмотра. Или указать компонент при создании ScrollPane и компонент будет добавляться к иллюминатору для вас:

//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

Смежные вопросы