2012-07-09 55 views
0

我想將圖像標籤放在屏幕上的某些座標處。
我用下面的代碼,但它不起作用。
此外,加入註釋行的代碼時,它給出了一個錯誤JLabel位置 - 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); 
    } 
} 

請幫我解決這個問題

+0

你收到了什麼錯誤? – Avery 2012-07-09 03:18:05

+0

***使用佈局!*** – 2012-07-10 00:30:06

回答

1

你應該組件先添加到幀,然後調用pack()setSize()setVisible()。在你的情況下,你已經在框架已經可見之後將ImageIcon添加到面板。加入panel.revalidate();應該解決眼前的問題。但是,最好先通過How to Make Frames教程。

至於第二個問題,Graphics對象未初始化。而且,這不是應該如何使用Graphics。如果要在組件表面上繪製字符串,請覆蓋paintComponent()並使用提供的Graphics對象。有關更多詳細信息,請參閱Lesson: Performing Custom Painting。否則,如果意圖只是通知用戶有關錯誤,則可以使用JOptionPane。相關教程是How to Make Dialogs

此外,使用絕對佈局是非常困難的。查看A Visual Guide to Layout Managers瞭解不同的佈局管理器及其基本用法。

0
setVisible(true); 

應寫在結尾處,將所有組件添加到幀。

否則寫

panel.revalidate(); 

加入各組分至面板之後。

你的代碼是在這裏:

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