2010-04-14 6 views
0

J'apprends Java au moment et ont la question suivante:Java pack Pas Redimensionner

j'ajoute mes contrôles à JFrame puis pack() avant d'afficher.

cela lance l'application et tout est très agréable.

Je me demandais s'il y avait un moyen d'empêcher l'utilisateur de redimensionner la fenêtre de l'application?

est également un moyen pour l'image dans JLabel de se développer lorsque l'utilisateur change la fenêtre de l'application?

au moment que je l'ai comme:

constraints.fill = GridBagConstraints.BOTH; 
    constraints.anchor = GridBagConstraints.CENTER; 

et centres que l'image, je voudrais pouvoir développer/rétrécir l'image.

merci.

+0

Je n'ai pas besoin de paramétrer mes cadres de manière indestructible. J'utilise toujours Matisse dans l'EDI NetBeans. C'est le meilleur et gratuit éditeur graphique! –

Répondre

3

je me demandais est-il un moyen d'arrêter l'utilisateur de redimensionner la fenêtre d'application ?

Si vous ne voulez pas permettre aux utilisateurs de redimensionner la fenêtre du tout, vous pouvez le faire

frame.setResizable (false); 



Je ne suis pas sûr que cette technique peut être utilisé avec succès en même temps avec pack(). Vous devriez certainement essayer, mais je me souviens qu'il y avait un problème que si vous faites:

frame.setResizable (false); 
pack(); 

alors pack() simplement ne fait pas ce qu'il faut et si vous faites:

pack(); 
frame.setResizable(false); 

vous devient fenêtre un peu plus étroit alors après seulement pack(). Bien sûr, une solution de contournement peut être trouvée (ou peut-être même c'est juste ma mauvaise expérience).

+0

this.setResizable (false); pack(); cela a fonctionné. dans l'autre sens, il a produit un résultat différent en introduisant un peu de rembourrage autour des commandes. – iTEgg

+0

@ikurtz: c'est bien! Je l'ai essayé avec Java 1.4, peut-être quelque chose a changé depuis. – Roman

+0

merci pour l'aide. im en utilisant Java 1.6.0_17 et NetBeans 6.8. content que ça marche! – iTEgg

2

pour la première question, vous pouvez arrêter l'utilisateur de redimensionner la fenêtre en utilisant la méthode setResizable(boolean):

frame.setResizable(false); 

Je ne me GridBagLayout, donc je ne peux pas vous aider à la deuxième question.

+0

La deuxième question n'est pas liée à l'utilisation de GridBagLayout, mais comment mettre à l'échelle l'image dans un JLabel. – jarnbjo

1

Pour éviter le redimensionnement de la fenêtre, vous pouvez simplement appeler setResizable(false) sur votre fenêtre ou votre cadre (J).

En ce qui concerne le JLabel et l'image, il n'y a pas de moyen facile de faire évoluer l'image en fonction de sa taille réelle. Si vous utilisez l'étiquette juste pour l'image (pas de texte), il est probablement plus facile pour vous d'implémenter votre propre composant, dans lequel vous peignez l'image vous-même.

1
also is there a way to for the image in JLabel to expand as the user changes the application window? 

Oui, vous devez créer votre propre LabelUI classe et réglez-le sur votre étiquette via setUI(). Dans votre classe LabelUI personnalisée, vous devrez remplacer getPreferredSize et peindre l'imageIcon comme vous le souhaitez.

Il est légèrement programmatique, vous pouvez regarder à la source de BasicLabelUI pour comprendre comment les choses sont faites. (http://www.java2s.com/Open-Source/Java-Document/Apache-Harmony-Java-SE/javax-package/javax/swing/plaf/basic/BasicLabelUI.java.htm)

ou

vous pourriez surpassement paintComponent() API de JLabel en créant votre propre classe JLabel étendue.