2016-11-03 79 views
-2

顯示圖像這裏是我的代碼段:無法在JPanel的

PreparedStatement ps = con.prepareStatement("select * from patrika where jantacode = ?"); 
        ps.setString(1, jComboBox1.getItemAt(jComboBox1.getSelectedIndex())); 
        ResultSet rs = ps.executeQuery(); 
        rs.next(); 
        jTextField2.setText(rs.getString("companycode")); 
        jTextField3.setText(rs.getString("manufacturer")); 
        jTextField4.setText(rs.getString("purchaseprice")); 
        jTextField5.setText(rs.getString("wholesaleprice")); 
        jTextField6.setText(rs.getString("retailprice")); 
        jTextField7.setText(rs.getString("location")); 
        jTextField1.setText(rs.getString("stock")); 

        //Getting and displaying image 
        Blob blob = rs.getBlob("image"); 
        int blobLength = (int) blob.length(); 
        byte[] bytes = blob.getBytes(1, blobLength); 
        blob.free(); 
        BufferedImage img = ImageIO.read(new ByteArrayInputStream(bytes)); 
        Graphics2D g = img.createGraphics(); 
        jPanel1.paint(g); 
        jPanel1.repaint(); 

一切工作正常,但JPanel中並沒有得到它繪製的圖像。

同樣的快照也被附上。任何人都可以請幫我找出我的錯誤嗎?

Problem Screenshot

+0

使用'JLabel'顯示圖像。順便說一句 - 上面的代碼是將面板繪製到圖像上,而不是面板上的圖像。 –

+0

正如@mKorbel所述,請查看[mcve]上的文檔。 –

回答

1

如果您希望將圖像描繪到一個JPanel,你必須覆蓋它的paintComponent()方法,你要畫它的每一個幀。

這將是這個樣子,從文檔:

public void paintComponent(Graphics g) { 
    // Let UI Delegate paint first, which 
    // includes background filling since 
    // this component is opaque. 

    super.paintComponent(g);  
    g.drawString("This is my custom Panel!",10,20); 
    redSquare.paintSquare(g); 
} 

現在你加載圖像只有一次它畫到面板。

多花點時間與文檔:) 這將做偉大:https://docs.oracle.com/javase/tutorial/uiswing/painting/index.html

+0

閱讀Oracle教程'2D圖形',部分'工作與圖像',沒有關於具有'paint()'的'JPanel'的東西,但通過重寫'paintComponent'和'super.paintComponent'作爲第一個代碼線裏面:-) – mKorbel

+0

答案去好方法,但方法,命令成句子是錯誤的 – mKorbel

+0

@mKorbel感謝修復,不記得正確的方法名稱從我的頭頂:) – MustSeeMelons