2014-09-04 78 views
2

我想將圖像添加到由Netbeans GUI Designer創建的面板中。 這裏是我的畫布類使用畫布在Jpanel中添加圖像

private static class GraphicsClass extends JPanel { 

    @Override 
    public void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     Toolkit tkit; 
     tkit=getToolkit(); 
     Image img=tkit.getImage("ampera.jpg"); 
     g.drawImage(img,0,0,this); 
    } 
} 

,這是我如何使用它在JFrame類的構造函數

this.Jpanel1=new GraphicsClass(); 

但圖像顯示犯規。如何解決它?

回答

1
this.Jpanel1=new GraphicsClass(); 

不會來跟蹤解決這個問題。假設你只需將一個面板拖放到框架上並命名爲Jpanel1,那麼在構造函數中就可以完成上述代碼。當您第一次拖放原始面板時,它將被初始化並進行佈局。當你執行上面的代碼時,你正在創建一個新組件。原來的面板仍然是添加的面板,並且是而不是相同的引用面板和您剛創建的新面板。所以新的面板永遠不會顯示,它只是一個(沒有參考標識符)。就像如果你有類似的東西

public class MyFrame extends JFrame { 
    public MyFrame() { 
     initComponents(); 
     jPanel1 = new GraphicsClass(); 
    } 

    private void initComponent() { 
     jPanel1 = new JPanel(); 
     // add jPanel1 to frame 
    } 

    private class GraphicsClass extends JPanel {} 

    private JPanel jpanel1; 
} 

這是基本的NetBeans設置。 initComponents方法中的代碼是自動生成的,默認情況下不可編輯。你可能編輯它,但我會建議反對它(除非你真的知道你在做什麼)。如果你看看代碼,你將會看到我在開始時所談論的究竟是什麼。

修正:從設計器創建一個面板表單(即New-> Swing Form-> JPanel表單)。然後,你可以簡單地將面板拖放到幀,如圖here

其他說明:

  • 不要在paintComponent方法來創建你的圖片。使其成爲類成員並在構造函數中創建它。

  • 取而代之的是面板的,如果你想創建一個像(說一個背景),你可以使用一個ImageIconJLabel和佈局管理器設置爲標籤,然後就可以開始添加成分在標籤。

    1. 拖放標籤
    2. 轉到標籤的屬性,然後單擊......icon財產。在對話框中,您可以瀏覽圖像。
    3. 然後右鍵單擊設計視圖中的標籤,然後爲標籤設置佈局管理器。然後您可以開始向組件添加標籤。
+1

感謝它確實有效:D,但它不適用於JDK 8,它顯示不支持的major.minor版本52.0,所以我將項目更改爲JDK 7,我使用的是OpenJDK。謝謝你:D – 2014-09-04 19:23:09

1

您可以通過使用BufferedImage類,或使用媒體跟蹤時,你的形象已加載

+0

我使用這個例子http:// pastebin。com/sLavqRPK和我修改paintComponent()函數就像我上面的代碼,並正確加載圖像,但我不知道如何使用此代碼到我的JPanel由Netbeans Builder創建 – 2014-09-04 18:02:17

+0

在NetBeans中,選擇您的Jpanel,去屬性調色板,去代碼,去自定義創建代碼 – Ezequiel 2014-09-04 18:38:20

+0

JPanel,通過擴展,是一個ImageConsumer,通過將「this」傳遞給drawImage,它將負責根據需要調度repaint。 – MadProgrammer 2014-09-04 20:53:01