Problèmes avec JTable et JScrollpane taille

J'ai un JScrollPane avec un JTable. Dans le JTable, j'ai d'abord 3 lignes. Plus tard, sur les lignes ajouté.

La valeur par défaut JTable avec mes 3 lignes, c'est moche parce que JScrollPane appels getPreferredScrollableViewportSize du client (JTable) et la valeur de retour est toujours le même. C'est pourquoi mon JTable/JScrollpane avec 3 lignes a cet espace libre, JScrollpane andJTable n'ont pas la même taille.

Ma solution est de faire une sous-classe JTable, remplacer getPreferredScrollableViewportSize et de retourner dans cette fonction getPreferredSize();. Maintenant, tout le JScrollPane a exactement la taille de la ligne 3 `JTable!

Lorsqu'une ligne est ajoutée, j'ai la commande ((JComponent) scrollPane.getParent()).revalidate();

Le composant scrollpane grandit avec la table.

Tout fonctionne bien!

Mais maintenant je veux mettre une certaine mise en page pour le conteneur du composant scrollpane (panneau):
myjpanel.setLayout (new BoxLayout(contentPane, BoxLayout.Y_AXIS));

Quand j'ai ajouter cette commande toute ma solution ne fonctionne plus.
Le composant scrollpane n'a pas la taille de la 3 ligne de la table, cet espace est de nouveau là.

Pourquoi est-ce?

Quelqu'un a une solution?

CONTINUÉ

Merci camickr pour me pointer dans la bonne direction. Ma solution est la suivante:

    scrollPane = new JScrollPane (table) {          
      public Dimension getMaximumSize () {
        double height = 0;

        double width = super.getMaximumSize().getWidth();
        height += columnHeader.getViewSize().getHeight();           
        height += viewport.getView().getPreferredSize().getHeight();
        height += (getViewportBorderBounds().getHeight() * -1);
        Dimension returnValue = new Dimension ((int) width, (int) height);
        return returnValue;
      }
    };

Il travaille maintenant au début.
Mais quand une ligne est ajoutée à la jtable et j'appelle revalidate(); sur le composite (conteneur parent de la scrollpanel) le jscrollpanel diminue à hauteur de 1 ligne + en-tête de!
Quiconque a une idée de ce qui est à faire dans cette situation.

CONTINUÉ

Maintenant je sais que le problème. C'est le viewportBorder. Afin d'obtenir l'ensemble, la hauteur exacte j'ai au total, la hauteur de la vue (Jtable), la hauteur de l'en-tête de colonne et la hauteur de la viewportBorder. La première fois getViewportBorderBounds().getHeight() renvoie -3, la prochaine fois, après une nouvelle ligne est insérée dans le modèle de table - la fonction renvoie 48. Je ne comprends pas pourquoi cette fonction renvoie 48 maintenant.
Un autre point est que camickr dit que la modification de la taille de la jscrollpane défaites le but du composant scrollpane. Je ne comprends pas cette. Comment peut-on être satisfait par défaut avec un jscrollpane taille de 450 x 400 (http://www.javalobby.org/java/forums/t19559.html) même lorsque la jtable a que 3 lignes au début. Ce carnet de l'espace supplémentaire n'a pas l'air très professionnels dans mes yeux. Quiconque a une meilleure solution.

Merci beaucoup pour vos réponses

SUITE
Maintenant tout fonctionne!
Au début, j'ai tout simplement mis le jscrollpane frontière à 0 ... sp.setBorder(createEmptyBorder());
De cette façon, je éviter d'avoir ces étranges les valeurs de retour de getViewportBorderBounds().getHeight()
Wolfgang

hmmm myTable.setFillsViewportHeight(true/false);

OriginalL'auteur Wolfgang Adamec | 2011-06-04