J'ai créé une interface graphique à l'aide d'une balançoire de Java. Je dois maintenant définir un exemple d'image.jpeg en tant qu'appount sur le cadre sur lequel j'ai mis mes composants.Comment faire ça? P>
8 Réponses :
Il n'y a pas de concept d'une "image de fond" dans un jPanel code> , il faudrait donc écrire sa propre façon de mettre en œuvre une telle fonctionnalité.
Un moyen d'atteindre cela serait de remplacer le Par exemple, on sous-classement un (ci-dessus n'a pas été testé.) P> Le Le code suivant pourrait être utilisé pour ajouter le champ code> jPanelwackground code> dans un dans cet exemple, le peinture compromis code> a > Méthode pour dessiner une image d'arrière-plan à chaque fois que le jPanel code> est actualisé. P> jPanel code> et ajoutez un champ à maintenez l'image d'arrière-plan et remplacez la méthode peinture code>: p> jframe code>: p> imageio.read (fichier) code> méthode a été utilisé pour lire dans le fichier JPEG externe. P> p>
Cela ne répond pas vraiment à la question. Il met une image d'arrière-plan sur un panneau, mais elle insère simplement le panneau dans la disposition normale. La question était de savoir comment définir un fond sur une image derrière d'autres composants.
Serait-il des problèmes si vous l'avez donné null code> comme votre imageObserver?
Vous pouvez soit faire une sous-classe du composant p>
http://www.jguru.com/faq/view.jsp ? EID = 9691 p>
ou violon avec des wrappers p>
the Panneau de fond entrée Affiche un couple de différents façons en fonction de vos besoins. p>
Voici une autre approche rapide sans utiliser un panneau supplémentaire.
JFrame f = new JFrame("stackoverflow") {
private Image backgroundImage = ImageIO.read(new File("background.jpg"));
public void paint( Graphics g ) {
super.paint(g);
g.drawImage(backgroundImage, 0, 0, null);
}
};
Je n'ai pas trouvé cette technique pour fonctionner correctement. L'image tire parfois sur les composants de l'enfant, ou parfois recouverte de fond normal de trame quand il ne devrait pas le faire.
Ceci est facilement effectué en remplaçant le volet de contenu du cadre avec un JPANEL qui dessine votre image:
try {
final Image backgroundImage = javax.imageio.ImageIO.read(new File(...));
setContentPane(new JPanel(new BorderLayout()) {
@Override public void paintComponent(Graphics g) {
g.drawImage(backgroundImage, 0, 0, null);
}
});
} catch (IOException e) {
throw new RuntimeException(e);
}
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class BackgroundImageJFrame extends JFrame
{
JButton b1;
JLabel l1;
public BackgroundImageJFrame()
{
setTitle("Background Color for JFrame");
setSize(400,400);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
/*
One way
-----------------*/
setLayout(new BorderLayout());
JLabel background=new JLabel(new ImageIcon("C:\\Users\\Computer\\Downloads\\colorful design.png"));
add(background);
background.setLayout(new FlowLayout());
l1=new JLabel("Here is a button");
b1=new JButton("I am a button");
background.add(l1);
background.add(b1);
// Another way
setLayout(new BorderLayout());
setContentPane(new JLabel(new ImageIcon("C:\\Users\\Computer\\Downloads \\colorful design.png")));
setLayout(new FlowLayout());
l1=new JLabel("Here is a button");
b1=new JButton("I am a button");
add(l1);
add(b1);
// Just for refresh :) Not optional!
setSize(399,399);
setSize(400,400);
}
public static void main(String args[])
{
new BackgroundImageJFrame();
}
}
Si vous utilisez NetBel, vous pouvez ajouter un jlabel au cadre et via les propriétés change d'icône à votre image et supprimez le texte. puis déplacez le jlabel vers le bas du jframe ou n'importe quel volet de contenu à travers Navigator P>
Je ne peux pas faire ce travail car lorsque vous ajoutez un panneau, l'image de fond est poussée sur.
La disposition du cadre doit être en présentation absolue.