Динамически добавленный JTable не отображается - PullRequest
1 голос
/ 23 сентября 2008

Ява Новичок здесь. У меня есть 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);
}

Полагаю, я что-то пропускаю, либо в отношении используемых мной классов свинга, либо в отношении Java. Есть идеи?

Ответы [ 2 ]

1 голос
/ 23 сентября 2008

«это» в вашем контексте неясно. Это внутри апплета? JFrame?

Возможно, у вас проблема с макетом, убедитесь, что вы вызвали setLayout для вашего класса с новым borderlayout.

В Swing-приложении вы хотите использовать getRootContentPane (). Add () вместо необработанного add (), в зависимости от версии.

Учебник по Java по добавлению контента верхнего уровня: http://java.sun.com/docs/books/tutorial/uiswing/components/toplevel.html

0 голосов
/ 24 сентября 2008

Если вы не работаете в потоке событий, это может быть проблемой - я видел, что это приводит к тому, что материал не отображается.

Если этот код вызывается в ответ на событие AWT (щелчок мыши, нажатие кнопки, ...), то это не проблема, но если это все тот же поток, который запустил ваше приложение, или этот код выполняется из таймер, вполне может быть.

...