2008-09-23 8 views
1

Java Débutant ici. J'ai un JFrame que j'ai ajouté à mon projet netbeans, et j'ai ajouté la méthode suivante, qui crée un JTable. Le problème est, pour une raison quelconque lorsque j'appelle cette méthode, le JTable n'est pas affiché. Aucune suggestion?Dynamiquement ajouté JTable ne pas afficher

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); 
} 

La méthode est appelée dans le contexte suivant:

DBGridForm gf = new DBGridForm(); //DBGridForm extends JFrame 
DBReader.outMatchesTable(gf); 
gf.setVisible(true); 

... où DBReader.outMatchesTable() est définie comme

static public void outMatchesTable(DBGridForm gf) { 
    DBReader ddb = new DBReader(); 
    ddb.readMatchesTable(null); 
    gf.showFromVectors(ddb.lastRsltColNames, ddb.lastRsltData); 
} 

Je suppose que je suis sur quelque chose , soit sur les classes de swing que j'utilise, ou sur Java. Des idées?

Répondre

1

"this" dans votre contexte n'est pas clair. Est-ce à l'intérieur d'une applet? un JFrame?

Vous rencontrez peut-être un problème de mise en page, assurez-vous que vous avez appelé setLayout sur votre classe avec une nouvelle bordure.

Dans une application Swing, vous devez utiliser getRootContentPane(). Add() au lieu d'un add() brut, selon la version.

Java tutoriel sur l'ajout de contenu de haut niveau: http://java.sun.com/docs/books/tutorial/uiswing/components/toplevel.html

+0

"this" fait référence à DBGridForm, qui étend JFrame. Je pensais que c'était évident quand j'ai dit que je (paraphrasant) "créé un JFrame avec netbeans, et ajouté la méthode suivante". On dirait que ce n'était pas aussi évident que je l'avais pensé – Graza

+0

OK, en appelant "this.setLayout (new java.awt.BorderLayout());" avant d'ajouter le volet de défilement a fait l'affaire. Je pense que la disposition par défaut ajoutée par netbeans doit être quelque chose de différent - c'est vraiment la première fois que j'ai utilisé netbeans, toute expérience précédente faisait des choses à partir de zéro ... – Graza

+0

La mise en page par défaut est une flowlayout, je pense. – davenpcj

0

Si vous n'êtes pas en cours d'exécution sur le fil des événements, il pourrait être un problème - j'ai vu ce genre de choses cause de ne pas afficher. Si ce code est appelé en réponse à un événement AWT (clic de souris, appui de bouton, ...) alors ce n'est pas le problème, mais si c'est toujours le même thread qui a démarré votre application, ou ce code est en cours d'exécution une minuterie, pourrait très bien être.

+0

Vous pouvez utiliser le thread d'événement java pour déclencher les choses de manière asynchrone. http://java.sun.com/products/jfc/tsc/articles/threads/threads1.html – davenpcj

Questions connexes