2014-04-24 63 views
0

背景信息:我有一個的(5,7)一個GridLayout的一個JFrame,我試圖將圖像添加到(0,0)不清晰的圖像添加到特定的JPanel

我下面這個單元格guide將圖像添加到特定的JPanel。

要顯示在一個JPanel小區中的圖像:

  1. 列表項
  2. 把芯片圖像分成一個ImageIcon
  3. 把那的ImageIcon成一個JLabel經由JLabel的的setIcon(chipIcon)方法
  4. 通過add(someLabel)方法將JLabel添加到JPanel - 現在JPanel將顯示圖像。

問題

的圖像被添加到的JPanel但似乎圖像被放大了很多,然後加入到JPanel的。

現實

enter image description here

期望

enter image description here

可編譯源代碼

package testing; 

import java.io.*; 
import java.util.*; 
import java.security.*; 
import javax.xml.bind.DatatypeConverter; 
import java.lang.*; 
import java.awt.*; 
import javax.swing.*; 
import java.awt.event.*; 
import java.awt.image.BufferedImage; 
import javax.imageio.ImageIO; 


public class Testing extends JPanel 
{ 

    public static class TestPanel extends JPanel 
{ 
    TestPanel() 
    { 
     int i = 5; // num of rows 
     int j = 7; // num of cols 

     PanelHolder = new JPanel[i][j]; 
     setLayout(new GridLayout(i,j)); 

     for (int m=0 ; m<i;m++) 
     { 
      for(int n=0;n<j;n++) 
      { 
       PanelHolder[m][n] = new JPanel(); 
       add(PanelHolder[m][n]); 
      } 
     } 





     ImageIcon ic1 = new ImageIcon("./src/testing/Ace_Diamond_1_1.png"); 
     JLabel jl1 = new JLabel(); 
     jl1.setIcon(ic1); 
     PanelHolder[0][0].add(jl1); 



    } 
     JPanel [][] PanelHolder; 

    JLabel DeckLabel; 
    JPanel DeckPanel; 
    ImageIcon Deckimg; 

    private BufferedImage image; 
    BufferedImage image2; 

} 


public static class ImagePanel extends JPanel 
{ 
    ImagePanel(BufferedImage image) 
    { 
     this.i = image; 

    } 


    public void paintComponent(Graphics g) 
    { 
     super.paintComponent(g); 

     g.drawImage(i,0,0, getWidth(), getHeight(), this); 



    } 


    BufferedImage i; 
} 




    public static void main(String[] args) 
    { 
     TestPanel tp = new TestPanel(); 

     JFrame frame = new JFrame(); 

     frame.add(tp); 
     frame.pack(); 
     frame.setVisible(true); 


    } 


} 

下載圖像here

注意:對於一些未知的原因,你必須清理並重建爲你做其他任何更改的解決方案,將堅持舊代碼

回答

1

問題最有可能的是,你卡圖像尺寸(691x963)對於您的手機來說太大。這會讓你主框架至少3455個像素寬,6741個像素高...:P

你要麼需要縮小原始圖像或動態地擴展它,例如...

BufferedImage card = ImageIO.read(getClass().getResource("/Ace_Diamond_1_1.png")); 
Image scaledInstance = card.getScaledInstance(100, -1, Image.SCALE_SMOOTH); 
JLabel jl1 = new JLabel(new ImageIcon(scaledInstance)); 

我應該指出,getScaledInstance不是縮放圖像的最佳選擇,請參閱The Perils of Image.getScaledInstance()以獲得更詳細的討論,並查看Quality of Image after resize very low -- Java的替代方法

+0

感謝我正在尋找的東西! – Computernerd

+0

很高興幫助;) – MadProgrammer