Question

Je suis coincé avec la façon de redimensionner le troisième bouton pour est devenu la même taille que les deux autres et placez-le sur le fond.

class ControlFrame extends JFrame 
    implements Runnable
{
    JButton jb_inc = new JButton();
    JButton jb_zero = new JButton();
    JButton jb_dec = new JButton();

    ControlFrame() {
        super("Control Frame");
        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }

    ControlFrame(int x,int y, int w, int h) {
        this();
        this.setBounds(x, y, w, h);
        this.setVisible(true);

        jb_inc.setBounds(10,10,90,20);
        jb_zero.setBounds(10,40,90,20);
        jb_dec.setBounds(10,60,90,20);

        jb_inc.setVisible(true);
        jb_zero.setVisible(true);
        jb_dec.setVisible(true);

        this.getContentPane().add(jb_inc);
        this.getContentPane().add(jb_zero);
        this.getContentPane().add(jb_dec);

    }

    public void run() {
    }
}

public class Counting_Machine 
{
    public static void main(String[] args) {
        ControlFrame cf = new ControlFrame(0,200,80,150);
    }
}
Était-ce utile?

La solution

Deux suggestions:

1) mettre les choses communes dans le bloc d'initialisation d'instance. Personnellement, je frémis chaque fois que je vois un appel à « ce () ».

{     this.setDefaultCloseOperation (WindowConstants.EXIT_ON_CLOSE); }

ControlFrame () {     super ( "Frame Control"); }

ControlFrame (int x, int y, int w, int h) {     super ( "Frame Control");     ... }

2) Je me débarrasser de x, y, w, constructeur h ... personnellement, j'ai une classe appelée WindowUtils qui a une méthode « position » qui figure sur la taille de l'écran et utilise ensuite les valeurs transmises pour créer une fenêtre qui est de la taille relative de l'écran. Ensuite, le code qui crée la fenêtre appelle cela. Je préfère avoir aussi peu de constructeurs possible (très souvent égale à zéro ou un, j'ai à peine deux ou plus).

.

3) this.getContentPane () ajouter (jb_inc); peut maintenant être écrite comme add (jb_inc); - depuis JDK 1.5 Je pense

.

4) ne jamais appeler des méthodes (toutes les dérogation possible des choses que vous avez ce. Avant) du constructeur. Si une sous-classe devait remplacer « ajouter » vous pouvez voir casser des choses. Ainsi, vous pouvez appeler super.add (), ou faire l'ajoute dans une autre méthode, ou faire votre dernière classe.

Maintenant, pour répondre à votre question ...: -)

Vous devez utiliser LayoutManagers pour obtenir ce que vous voulez.

En fonction de ce que vous voulez que vous voulez probablement utiliser un BorderLayout afin que vous puissiez obtenir le bouton en bas.

Autres conseils

Je vous suggère de commencer par lire la section du tutoriel Swing sur Utilisation des gestionnaires de mise en page Votre code ne fonctionnera pas parce que vous essayez d'ajouter 3 composants au « centre » du BorderLayout qui ne fonctionnera pas. Choisissez une LayoutManager qui répond mieux à vos besoins.

Il n'y a pas besoin d'utiliser la méthode setBounds (...) lorsque vous utilisez un gestionnaire de mise en page. Le travail du gestionnaire de mise en page est la position des composants en fonction des règles du gestionnaire de mise en page. La taille préférée de chaque bouton doit être la même puisque vous ne l'avez pas ajouté de texte aux boutons.

En outre, il n'y a pas besoin d'invoquer setVisible () sur les boutons, tous les composants Swing sont visibles par défaut, à l'exception des conteneurs de niveau supérieur (JFrame, JDialog).

Puisque vous bornant sur tout, vous n'avez pas besoin d'un LayoutManager du tout. Définissez votre LayoutManager null, alors vous pouvez placer tout vous-même, vous êtes dans votre exemple.

this.setLayoutManager(null)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top