2012-07-09 13 views
0

Je veux mettre une étiquette d'image à certaines coordonnées sur l'écran.
J'ai utilisé le code ci-dessous, mais cela ne fonctionne pas.
En outre, lors de l'ajout de la ligne a commenté le code, il donne une erreurJLabel Location- JAVA GUI

import java.awt.*; 
import java.awt.image.BufferedImage; 
import java.io.File; 
import java.io.IOException; 
import javax.imageio.ImageIO; 
import javax.swing.*; 

public class EmiloLadderSnack 
{ 
    public static void main(String args[]) 
    { 
     Graphics g; 
     JFrame frame=new JFrame("EmiloLadderSnack"); 
     JPanel panel=new JPanel(); 
     frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE); 
     frame.setBounds(0, 0, Toolkit.getDefaultToolkit().getScreenSize().width, Toolkit.getDefaultToolkit().getScreenSize().height); 
     frame.setVisible(true); 
     frame.add(panel); 
     BufferedImage img=null; 
     try 
     { 
      img=ImageIO.read(new File("/media/01CCE00FA6888D80/Achieve/Eclipse/EmiloLadderSnack/src/photo.jpg")); 
     } 
     catch(IOException e) 
     { 
      //g.drawString(e.toString(), 0, 0); 
     } 
     ImageIcon icon=new ImageIcon(img); 
     JLabel lbl=new JLabel(icon); 
     lbl.setLocation(50, 50); 
     panel.add(lbl); 
     lbl.setLocation(50, 50); 
    } 
} 

S'il vous plaît, aidez-moi à résoudre ce problème

+0

Quelle est l'erreur que vous recevez? – Avery

+0

*** Utilisez des mises en page! *** –

Répondre

1

Vous devez d'abord ajouter des composants au châssis, puis appeler pack(), setSize() ou . Dans votre cas, vous ajoutez ImageIcon au panneau après que le cadre est déjà visible. Ajouter panel.revalidate(); devrait résoudre le problème immédiat. Cependant, il est préférable de commencer par le didacticiel How to Make Frames. Comme pour la deuxième question, Graphics l'objet n'est pas initialisé. De plus, ce n'est pas ainsi que Graphics devrait être utilisé. Si vous souhaitez dessiner une chaîne sur la surface du composant, remplacez paintComponent() et utilisez l'objet Graphics fourni. Voir Lesson: Performing Custom Painting pour plus de détails. Sinon, si l'intention est simplement de notifier l'utilisateur de l'erreur, vous pouvez utiliser JOptionPane. Le didacticiel correspondant est le How to Make Dialogs. En outre, l'utilisation de la disposition absolue peut être très difficile. Découvrez A Visual Guide to Layout Managers pour comprendre les différents gestionnaires de disposition et leur utilisation de base.

0
setVisible(true); 

doit écrire à la fin de, en ajoutant tous les composants à la trame.

ou bien écrire le

panel.revalidate(); 

après avoir ajouté les composants au panneau.

Votre code est ici:

import java.awt.*; 
import java.awt.image.BufferedImage; 
import java.io.File; 
import java.io.IOException; 
import javax.imageio.ImageIO; 
import javax.swing.*; 

public class EmiloLadderSnack 
{ 
public static void main(String args[]) 
{ 
    Graphics g; 
    JFrame frame=new JFrame("EmiloLadderSnack"); 
    JPanel panel=new JPanel(); 
    frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE); 
    frame.setBounds(0, 0, Toolkit.getDefaultToolkit().getScreenSize().width, Toolkit.getDefaultToolkit().getScreenSize().height); 

    frame.add(panel); 
    BufferedImage img=null; 
    try 
    { 
     img=ImageIO.read(new File("/media/01CCE00FA6888D80/Achieve/Eclipse/EmiloLadderSnack/src/photo.jpg")); 
    } 
    catch(IOException e) 
    { 
     //g.drawString(e.toString(), 0, 0); 
    } 
    ImageIcon icon=new ImageIcon(img); 
    JLabel lbl=new JLabel(icon); 
    lbl.setLocation(50, 50); 
    panel.add(lbl); 
    lbl.setLocation(50, 50); 
    frame.setVisible(true);//put it here 
} 
}