Динамически добавленный JTable не отображается
Вопрос
Java-новичок здесь.У меня есть JFrame, который я добавил в свой проект NetBeans, и добавил к нему следующий метод, который создает JTable.Проблема в том, что по какой-то причине, когда я вызываю этот метод, JTable не отображается.Какие-либо предложения?
public void showFromVectors(Vector colNames, Vector data) {
jt = new javax.swing.JTable(data, colNames);
sp = new javax.swing.JScrollPane(jt);
//NB: "this" refers to my class DBGridForm, which extends JFrame
this.add(sp,java.awt.BorderLayout.CENTER);
this.setSize(640,480);
}
Метод вызывается в следующем контексте:
DBGridForm gf = new DBGridForm(); //DBGridForm extends JFrame
DBReader.outMatchesTable(gf);
gf.setVisible(true);
...где DBReader.outMatchesTable() определяется как
static public void outMatchesTable(DBGridForm gf) {
DBReader ddb = new DBReader();
ddb.readMatchesTable(null);
gf.showFromVectors(ddb.lastRsltColNames, ddb.lastRsltData);
}
Я предполагаю, что я что-то упускаю из виду либо в отношении классов Swing, которые я использую, либо в отношении Java.Есть идеи?
Решение
«это» в вашем контексте неясно.Это внутри апплета?JFrame?
Возможно, у вас проблема с макетом. Убедитесь, что вы вызвали setLayout в своем классе с новым borderlayout.
В приложении Swing вы захотите использовать getRootContentPane().add() вместо обычного add(), в зависимости от версии.
Учебное пособие по Java по добавлению контента верхнего уровня: http://java.sun.com/docs/books/tutorial/uiswing/comComponents/toplevel.html
Другие советы
Если вы не работаете в потоке событий, это может быть проблемой — я видел, что некоторые вещи не отображаются.
Если этот код вызывается в ответ на событие AWT (щелчок мыши, нажатие кнопки и т. д.), то это не проблема, но если это все еще тот же поток, который запустил ваше приложение, или этот код выполняется по таймеру, это может очень хорошо быть.