comment puis-je mettre un JButton sur une image?
Je suis en train de corriger un JFrame où il y aura une image d'arrière-plan et sur l'image JButtons qui fera de certaines commandes. J'essaie de le faire sans la mise en page parce que je veux mettre des petits boutons dans certains des endroits spécifiques sur la JFrame mais à chaque fois que je le fais, l'image de fond vient à l'avant ou à l'JFrame a une taille égale à la JFrame taille. Avec le code suivant, la JButton a la même taille de JFrame. J'ai essayé de changer la taille et l'emplacement de la JButton mais rien. Pouvez-vous m'aider s'il vous plaît?
voici le code
public final class Test extends JComponent { private Image background; private JFrame frame; private Dimension dimension;
public Test() { dimension = new Dimension(15, 15); frame = new JFrame("Iphone"); frame.pack(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().add(this); frame.setBounds(641, 0, 344, 655); frame.setVisible(true); test = displayButton("tigka"); frame.getContentPane().add(test); } public void update(Graphics g) { paint(g); } public void paintComponent(Graphics g) { super.paintComponents(g); g.drawImage(background, 0, 25, null); //draw background
//label();
test = displayButton("test");
}public JButton displayButton(String nom)
{
JButton bouton = new JButton(nom);bouton.setSize(100, 100);
bouton.setPreferredSize(dimensions);
return bouton;
}se débarrasser de la méthode update (). Il n'y a pas besoin de surcharger cette méthode dans Swing. C'est un vieux code pour AWT et ne doit pas être utilisé dans une application Swing.OriginalL'auteur Eristikos | 2011-05-06
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin de changer la
content pane
pour obtenir un arrière-plan pour votreFrame
.De sortie:
faux: (peut-être une faute de frappe) de la super méthode à appeler est paintComponent au lieu de paintComponents
Faute de frappe, corrigé! Merci!
et maintenant, inverser l'ordre des appels de nouveau 😉
si vous la changez pour le paintComponent (qui je pense est à droite), puis il doit être utilisé en premier pour faire le tout de la peinture par défaut sur lequel vous souhaitez attirer votre image. Tester vous-mêmes.
OriginalL'auteur dacwe
Avez-vous essayé d'utiliser un JLabel avec HTML dans le label? Quelque chose comme ceci:
puis sur le dessus de votre étiquette, vous pouvez ajouter votre bouton?
+1 @Liv solution intéressante.
-1 pour l'utilisation de code html pas besoin ... de créer et de définir une ImageIcon à la place. Plus à l'aide d'un JLabel à tous n'est pas une bonne idée: l'exigence est d'avoir un fond sous la normale, les composants ajoutés ...
OriginalL'auteur Liv
Vous devez permuter ces deux lignes:
Ainsi, il devrait être de cet ordre:
En outre, notez que le contenu du volet mise en page par défaut est BorderLayout. Ainsi, vous définissez la mise en page de votre contenu volet null explicitement.
Il n'y a pas de différence dans mon post, juste votre code avec des commentaires et de l'indice de l'échange. 🙂
ne touchez jamais awt méthodes de peinture dans les Swing JComponents 😉 c'est Donc un -1 sauf pour avoir été utile en ce qu'elle complètement perplexe moi - parce que l'appel à super.paintComponent avant peinture personnalisée code la séquence à mettre en œuvre (dans le cas contraire, la peinture personnalisée serait-peint avec l'arrière-plan opaque pour les composants)
Oui, ce serait le bon ordre, mais il a appelé
super.paintComponents
passuper.paintComponent
. Sans compter que vous êtes en droit de ne pas appeler la méthode manuelle, mais plutôt d'appelerpaintComponent
(n'a pas à reconnaître que comme un potentiel faute de frappe 🙂 ).OriginalL'auteur Thomas
OriginalL'auteur NIKHIL UPADHYAY