2009-12-12 4 views
0

J'ai créé un bouton personnalisé. Pour cela, j'ai surchargé la méthode paintComponenet. Comment puis-je définir le texte du bouton sur un tel bouton? J'ai essayé de le faire en utilisant la méthode drawString. Mais quelles valeurs x, y dois-je donner? (g.drawString ("texte du bouton", x, y)). S'il vous plaît jusqu'à moi si quelqu'un a géré cela.Java Swing JButton

@Override 
public void paintComponent(Graphics g) { 
    super.paintComponent(g); 

    DefaultButtonModel bmodel = (DefaultButtonModel) super.getModel(); 

    Image im = (new ImageIcon("image")).getImage(); 
    System.out.println("im is "+im.getSource()); 
    System.out.println("widthis" + im.getWidth(this)); 
    int imageX = (getWidth() - im.getWidth(this)) /2; 
    int imageY = (getHeight() - im.getHeight(this))/2; 
    if(!super.isEnabled()) { 
     System.out.println("in disabled"); 
     g.drawImage(disabled, imageX, imageY, this); 
     g.drawString(super.getText(), super.getX(),(int) (super.getY()/(1.9))); 
    } 
    else { 
     if(bmodel.isPressed()) { 
      System.out.println("in pressed"); 
      g.drawImage(down, imageX, imageY, this); 
     } else if(bmodel.isRollover()) { 
      System.out.println("in roll overed"); 
      g.drawImage(highlight, imageX, imageY, this); 
     } else if(bmodel.isEnabled()) { 
      System.out.println("in enabled"); 
      g.drawImage(normal, imageX, imageY, this); 
     } else { 
      System.out.println("in else"); 
      g.drawImage(normal, imageX, imageY, this); 
     } 
     g.drawString(super.getText(), super.getX(),(int) (super.getY()/(2.5))); 
    } 



} 
+0

Pourquoi prenez-vous autant de problèmes? Pourquoi n'utilisez-vous pas un IDE (NetBeans, Eclipse, etc.)? –

+1

Prasoon? Qu'est-ce qu'un IDE a à faire avec les contrôles Swing personnalisés? – Joey

+0

@JOhannes: Rien, mais il serait plus facile pour lui de concevoir une interface graphique avec l'aide d'un IDE, mais il a besoin de connaître les bases. –

Répondre

1

Pourquoi ne pas simplement appeler super(g) sur la première ligne de la méthode paintComponent et utiliser la méthode setText pour changer la chaîne sur le bouton.

Quelque chose comme ceci:

protected void paintComponent(Graphics g) 
{ 
    super.paintComponent(g); 
    // do your customized painting here... 
} 
+0

super (g) me donne l'erreur .. "appel à super doit être la première déclaration du constructeur" – Nilesh

+0

désolé, il aurait dû être super.paintComponent (g); –

+0

C'est le ticket - pour peindre l'arrière-plan et faire de la peinture personnalisée en premier. – Pool

0

Qu'est-ce que vous essayez de faire, vous n'a jamais dit l'exigence réelle? Il semble que vous essayez de dessiner du texte au-dessus de l'image. Si oui, alors il n'y a pas besoin de peinture personnalisée, il suffit d'utiliser:

button.setHorizontalTextPosition(JButton.CENTER); 
button.setVerticalTextPosition(JButton.CENTER); 

Vous pouvez définir des icônes de survol et de pression si nécessaire.