2010-01-31 5 views
1

Comment dessinez-vous une boîte carrée remplie dans Java qui est exactement au centre d'une fenêtre d'applet? et lors du redimensionnement de la fenêtre, il est centré horizontalement et verticalement dans la fenêtre de l'applet? Je veux qu'il s'adapte à la hauteur verticale de l'écran mais reste carré même comme les bords horizontaux. Si la fenêtre est redimensionnée pour être trop étroite, les côtés peuvent être coupés?Comment dessiner une boîte carrée remplie dans Java qui est exactement au centre d'une fenêtre d'applet?

+0

Est-ce que c'est par hasard? –

+0

Vous cherchez à écrire le code de peinture vous-même, ou cherchez-vous un gestionnaire de disposition pour garder un composant centré? Aussi, qu'entendez-vous par "reste carré même comme les bords de largeur horizontale"? Voulez-vous dire que vous voulez qu'il reste une taille minimale? – aperkins

+0

oui c'est la dernière partie de ma mission que je fais depuis quelques jours avant de décider que je dois jeter l'éponge. C'est un code de peinture dans lequel j'ai utilisé fillRect pour composer. mais le problème est quand j'ai essayé de le centrer, par exemple. fillRect (largeur * 5/10, hauteur * 5/10, largeur/10/2, hauteur/10/2); il centre, mais seulement le haut gauche (x, y cordes) le centre et le milieu pas de l'image. désolé, je veux dire reste carré même lorsque la largeur horizontale change-> comme si elle est redimensionnée à un rectangle très étroit, il serait alors recadré au rectangle – Tom

Répondre

1

Voici un exemple de panneau qui fera un carré de 30px au milieu, ou redimensionnera avec le panneau. Peut-être qu'il peut vous donner assez pour faire des progrès.

private class MyPanel extends JPanel{ 
    int height = 30;//30 pixels high. 
    int width = 30;//30 pixels wide. 
    boolean resize = true; 


    @Override 
    protected void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     int verticalCenter = this.getHeight()/2; 
     int horizontalCenter = this.getWidth()/2; 

     if(!resize){ 
     int topLeftSquareCornerY = verticalCenter - (height/2); 
     int topLeftSquareCornerX = horizontalCenter - (width/2); 

     g.setColor(Color.BLUE); 
     g.drawRect(topLeftSquareCornerX, topLeftSquareCornerY, width, height); 
     }else{ 
     g.setColor(Color.GREEN); 
     g.drawRect(15,15,(this.getWidth()-30), this.getHeight()-30); 
     } 
    } 
    } 
+0

merci beaucoup pour l'aide ... je l'ai compris en partie parce que j'ai trouvé un mauvais calcul dans mon code. Mais merci pour l'aide. vous les gars, vous avez été extrêmement utile. :) – Tom

1

On dirait que votre problème de base est de savoir comment placer un rectangle donné correctement. Vous devez avoir le middle de l'écran dans le middle du rectangle.

La distance entre le milieu du rectangle et ses côtés est respectivement la moitié de la hauteur et de la longueur.

Donc x1, x2 = milieu_x ± largeur/2, et y1, y2 = milieu_y ± hauteur/2.

1

Je suppose que vous voulez dessiner un carré avec un size fixe qui reste dans le center du panneau que le panneau est redimensionné. Une approche à ces problèmes est de commencer à la fin et de travailler en arrière. Vous savez à propos de fillRect(), alors écrivez ce que vous devez "remplir les blancs" requis par cette méthode. Appelez les coordonnées centerx et y. Le coin supérieur serait la moitié de size et le coin gauche serait la moitié de size à gauche; la largeur et la hauteur de la place serait juste size:

g.fillRect(left,  top,  width, height); 
g.fillRect(x - size/2, y - size/2, size, size); 

maintenant revenir en arrière et figure que x et y sont la largeur de la moitié du panneau et de la hauteur, respectivement:

int x = getWidth()/2; 
int y = getHeight()/2; 

Maintenant, mettez tous ensemble dans votre méthode paintComponent().

Questions connexes