2012-07-30 103 views
1

我有這個問題,我的Label2被分配爲文本沒有出現在Jframe上,即使我添加了它。我假設我設置爲圖像的其他標籤疊加它?如果這是問題,我將如何去修復它?JLabel does not appear

import java.awt.Dimension; 
import java.awt.event.MouseAdapter; 
import java.awt.event.MouseEvent; 

import javax.swing.ImageIcon; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.SwingUtilities; 

public class Generator extends JFrame { 

    private static final long serialVersionUID = 1L; 

    /** 
    * Launch the application. 
    */ 
    public static void main(final String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        final Generator frame = new Generator(); 
        frame.setVisible(true); 
       } catch (final Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     }); 
    } 

    /** 
    * Create the frame. 
    */ 
    public Generator() { 
     /* 
     * @Images/Text 
     */ 
     final ImageIcon icon = new ImageIcon("data/hover_a.png"); 
     final JLabel label = new JLabel(icon); 

     final ImageIcon icon1 = new ImageIcon("data/background.png"); 
     final JLabel label1 = new JLabel(icon1); 

     final ImageIcon img = new ImageIcon("data/icon.png"); 

     final JLabel label2 = new JLabel("Test Text"); 

     /* 
     * @Image/Text Bounds 
     */ 
     label.setBounds(24, 266, 240, 40); 
     label1.setBounds(0, 0, 289, 330); 
     label2.setBounds(0, 0, 80, 15); 

     /* 
     * @Image Hovers 
     */ 
     label.addMouseListener(new MouseAdapter() { 

      @Override 
      public void mouseEntered(final MouseEvent evt) { 
       label.setIcon(new ImageIcon("data/hover_b.png")); 
      } 

      @Override 
      public void mouseExited(final MouseEvent evt) { 
       label.setIcon(new ImageIcon("data/hover_a.png")); 
      } 

     }); 

     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setPreferredSize(new Dimension(295, 358)); 
     setTitle("test"); 
     getContentPane().setLayout(null); 
     setResizable(false); 
     setVisible(true); 
     setIconImage(img.getImage()); 
     getContentPane().add(label); 
     getContentPane().add(label1); 
     getContentPane().add(label2); 
     pack(); 
    } 
} 
+2

「我現在假設其他我設置爲圖像的標籤與它重疊?「 - 是的。 「如果那是問題,我該如何解決它?」 - 使用合適的佈局管理器 – MadProgrammer 2012-07-30 01:41:00

+0

感謝您的快速回復,我會看看其他佈局管理人員是否會徹底解決此問題。 – 0x29A 2012-07-30 01:51:16

+0

'最終ImageIcon img =新ImageIcon(「data/icon.png」);'A'File'在部署時不適用於應用程序資源。 – 2012-07-30 23:47:51

回答

2

在添加所有組件之前,您正在調用setVisible(true)。不要這樣做。該沃德是:

  • 添加成分
  • 呼叫pack()
  • 呼叫setVisible(true)
  • 如果以後你進行更改,然後調用revalidate()容器上,然後repaint()
+0

謝謝你:) – 0x29A 2012-07-30 16:17:51

2

通過閱讀您的代碼,看起來您正嘗試將圖像層疊在一起。通過使用客戶面板與風俗畫這將更好的實現

看一看在Performing Custom Painting教訓& 2D Graphics Trail

沒有準確知道你想達到的目標,我會創建一個繪製的背景板背景,然後我會使用佈局管理器來佈置其他兩個圖標(我個人使用的是GridBagLayout,但可能會因爲您的需要而有點過分殺死)

我也會熟悉自己的繪畫順序組件

+0

謝謝,我會研究這些教程。 – 0x29A 2012-07-30 16:17:23