2014-11-04 66 views
1

這是我的第一篇文章,我的英文不太好,所以我希望你的傢伙 瞭解我有什麼問題,也希望我在這裏沒有做錯什麼。爪哇Swing圖像不顯示

我的問題:

我學習ATM擺動和它是如何工作的,但我一直有些問題,畫面其中犯規出現。 也許我不明白Swing的某些部分,所以我希望你能解釋我爲什麼圖片不加載,所以我可以學習它,做一個更好的工作:)

我嘗試了很多variatons,但我真的只失敗了,我不知道爲什麼。 我也試圖用圖形。

我的計劃:

的JFrame - >的JPanel - > JLabel的(有圖片,應該把它放在JPanel的或可能存在的JPanel的一個直接的方式)

test2.jpg是我的包文件夾和日食不要大喊一個錯誤。

另外我會JPanel像一個單獨的類,它不會擴展JFrame到桂類。

這裏是我的3類:

開始:

package verwaltungssoftware; 

public class Start 

{ 

    //Start der Applikation 

    public static void main(String[] args) 

    { 
     System.out.println("Willkommen bei der Verwaltungssoftware fuer die Jobsuche"); 
     new Gui(); 
    } 

} 

桂:

package verwaltungssoftware; 
import java.awt.BorderLayout; 
import java.awt.Dimension; 
import java.awt.Toolkit; 
import javax.swing.JFrame; 


public class Gui 
{ 
    //Importiert Auflösung des Bildschirms 
    Toolkit tk = Toolkit.getDefaultToolkit(); 
    Dimension screenSize = tk.getScreenSize(); 

    //Setzt Variablen für die Auflösung 
    public int aufloesungBreite = screenSize.width; 
    public int aufloesungHoehe = screenSize.height; 

    //Setzt die Berechnung des JFrame hauptfenster Location 
    private int breite = aufloesungBreite/2 - 640; 
    private int hoehe = aufloesungHoehe/2 - 400; 


    public Gui() 

    { 
     JFrame hauptfenster = new JFrame("Verwaltungssoftware fuer die Jobsuche"); 
     hauptfenster.setDefaultCloseOperation(hauptfenster.EXIT_ON_CLOSE); 
     hauptfenster.setResizable(false); 
     hauptfenster.setLocation(breite, hoehe); 
     hauptfenster.setSize(1280,800); 
     hauptfenster.setLayout(new BorderLayout(5,5)); 

     //Addet hauptpanel zum JFrame 
     Panel hauptpanel = new Panel(); 
     hauptfenster.add(hauptpanel); 
     hauptpanel.setVisible(true); 
     hauptfenster.setVisible(true); 
    } 


} 

和麪板:

package verwaltungssoftware; 
import java.awt.BorderLayout; 
import java.awt.Image; 
import java.io.IOException; 
import javax.imageio.ImageIO; 
import javax.swing.ImageIcon; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 

public class Panel extends JPanel 
{ 
    private static final long serialVersionUID = 6769810448979262470L; 

    //Variablen 

    Image icon1; 


    //Konstruktor 
    public Panel() 

    { 
     try 
     { 
      icon1 = ImageIO.read(getClass().getResource("test2.jpg")); 
     } 
     catch (IOException e) 
     { 
      e.printStackTrace(); 
     } 

     JPanel panelhauptfenster = new JPanel(); 
     panelhauptfenster.setLayout(new BorderLayout (5,5)); 
     panelhauptfenster.setSize(1280,800); 
     panelhauptfenster.setLocation(0,0); 
     panelhauptfenster.setVisible(true); 

     JLabel myLabel=new JLabel(); 
     myLabel.setLocation(0,0); 
     myLabel.setSize(panelhauptfenster.getWidth(),panelhauptfenster.getHeight()); 
     myLabel.setIcon(new ImageIcon(icon1)); 
     myLabel.setVisible(true); 

     panelhauptfenster.add(myLabel); 
    } 
} 

非常感謝你提前爲您的幫幫我。

+0

'的getClass()。的getResource( 「test2.jpg」)'..是坐落在'verwaltungssoftware'目錄/ path其中'getResource'會希望找到它的形象呢? – 2014-11-04 05:33:59

+0

我改正它的路徑時,它給了我一個錯誤: 線程「main」java.lang中的異常。IllegalArgumentException:input == null! (ImageIO.java:1388) \t at verwaltungssoftware.Panel。 (Panel.java:25) \t at verwaltungssoftware.Gui。 (Gui.java:34) \t at verwaltungssoftware.Start.main(Start.java:13) picture is in package verwaltungssoftware – Cronical 2014-11-04 05:37:20

+0

好的哦。將getClass()。getResource(「test2.jpg」)因子放入源代碼中,然後放入答案並嘗試。上述代碼中的方法存在一些我已更正的缺陷。 – 2014-11-04 05:56:43

回答

1

以下源代碼可用。更改包括:

  • 返回合理的首選大小。刪除所有呼叫setSize(..)
  • 找出添加圖像的面板,並將其直接添加到Panel實例中。
  • Panel被重命名爲ImagePanel,因此與現有的AWT類名稱不同!
  • 刪除對setVisible(..)的呼叫。唯一適用的是頂級容器,如JFrameJDialog。對於其餘部分,將它們添加到本身可見的容器中。

import java.awt.*; 
import javax.swing.*; 
import java.net.URL; 
import javax.imageio.ImageIO; 

class Gui { 
    //Importiert Auflösung des Bildschirms 
    Toolkit tk = Toolkit.getDefaultToolkit(); 
    Dimension screenSize = tk.getScreenSize(); 

    //Setzt Variablen für die Auflösung 
    public int aufloesungBreite = screenSize.width; 
    public int aufloesungHoehe = screenSize.height; 

    //Setzt die Berechnung des JFrame hauptfenster Location 
    private int breite = aufloesungBreite/2 - 640; 
    private int hoehe = aufloesungHoehe/2 - 400; 


    public Gui() { 
     JFrame hauptfenster = new JFrame("Verwaltungssoftware fuer die Jobsuche"); 
     hauptfenster.setDefaultCloseOperation(hauptfenster.EXIT_ON_CLOSE); 
     hauptfenster.setResizable(false); 
     hauptfenster.setLocation(breite, hoehe); 
     hauptfenster.setSize(1280,800); 
     hauptfenster.setLayout(new BorderLayout(5,5)); 

     //Addet hauptpanel zum JFrame 
     ImagePanel hauptpanel = new ImagePanel(); 
     hauptfenster.add(hauptpanel); 
     hauptpanel.setVisible(true); 
     hauptfenster.setVisible(true); 
    } 

    public static void main(String[] args) { 
     Runnable r = new Runnable() { 
      @Override 
      public void run() { 
       new Gui(); 
      } 
     }; 
     SwingUtilities.invokeLater(r); 
    } 
} 

class ImagePanel extends JPanel { 
    //Variablen 
    Image icon1; 

    //Konstruktor 
    public ImagePanel() { 
     try { 
      URL url = new URL("http://i.stack.imgur.com/7bI1Y.jpg"); 
      icon1 = ImageIO.read(url); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     setLayout(new BorderLayout (5,5)); 
     JLabel myLabel=new JLabel(new ImageIcon(icon1)); 
     add(myLabel); 
    } 

    // very important! 
    @Override 
    public Dimension getPreferredSize() { 
     return new Dimension(icon1.getWidth(this), icon1.getHeight(this)); 
    } 
} 
+0

不錯的工作圖片正在加載,但我不知道如何讓面板到框架。當優先考慮從這個寬度和長度,我必須設置面板的大小,因爲我把它添加到gui JFrame。 當我明白,正確的圖標具有面板的大小後,getpreferedsize – Cronical 2014-11-04 06:03:50

+0

如果你想進一步的幫助,準備一個[MCVE](http://stackoverflow.com/help/mcve)(最小完整可驗證示例)像我發佈。值得注意的是,它需要是一個源文件(可能有多個類,但只有一個**'public' **類),並且應該熱鏈接到圖像。 – 2014-11-04 06:06:45

+0

我做了一個錯誤,它的工作原理,但我不能在你的例子中使用像你這樣的URL,因爲我有一個PATH。我想我需要像下面寫下的康提那樣去做。 但存在的問題是,java無法從Imageicon轉換爲圖像。 – Cronical 2014-11-04 06:20:39

0

試試這個。 icon1 = new ImageIcon(getClass()。getResource(「/ test2.jpg」))

+0

無法將圖像轉換爲圖像 – Cronical 2014-11-04 05:49:34

+0

抱歉,您無法理解。 – Kandy 2014-11-04 05:53:49