12
votes

Comment définir une image comme arrière-plan pour le cadre dans l'interface graphique de Java?

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?


0 commentaires

8 Réponses :


21
votes

2 commentaires

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 comme votre imageObserver?



2
votes

Vous pouvez soit faire une sous-classe du composant

http://www.jguru.com/faq/view.jsp ? EID = 9691

ou violon avec des wrappers

http://www.java-tips.org/java-se-tips/javax.swing/wrap-a-swing-jcomponent-in-a-background-Image.html


0 commentaires

3
votes

the Panneau de fond entrée Affiche un couple de différents façons en fonction de vos besoins.


0 commentaires

1
votes

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);
  }
};


1 commentaires

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.



5
votes

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);
}


0 commentaires

0
votes
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();
 }
 }

0 commentaires

1
votes

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


2 commentaires

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.



2
votes

Peut-être que le moyen le plus simple serait d'ajouter une image, de l'échelle et de la définir sur le jframe / jPanel (dans mon cas JPanel), mais n'oubliez pas de "ajouter"-le au conteneur seulement après avoir ajouté les autres enfants Composants. Entrez la description de l'image ici xxx


0 commentaires