2012-04-28 77 views
1

我正在嘗試使用JFileChooser將圖像加載到JPanel中。但是,當我嘗試運行該程序並加載所選圖像時,JPanel中沒有任何反應。我在這裏附上源代碼片段:使用JFileChooser在JPanel中加載圖像

JFileChooser fileChooser = new JFileChooser(); 
fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); 
FileFilter filter = new FileNameExtensionFilter("Image files","jpeg","jpg"); 
fileChooser.setFileFilter(filter); 
int result = fileChooser.showOpenDialog(null);  
if(result == fileChooser.APPROVE_OPTION){ 
imgFile = fileChooser.getSelectedFile();//imgFile is File type  
try{ 
    myPicture = ImageIO.read(imgFile);//myPicture is BufferedImage 
    JLabel picLabel = new JLabel(new ImageIcon(myPicture)) ; 
    imagePanel.add(picLabel); 
    imagePanel.repaint(); 
    System.out.println("You have selected "+imgFile); 
    }catch(Exception e){ 
     e.printStackTrace(); 
    } 
    } 

} 

任何人都可以對此有所瞭解嗎?

+0

爲了更好地幫助越早,張貼[SSCCE(http://sscce.org/)。 *「之後..從其位置移開..如何限制此(?)」*佈局。更多信息。當我看到SSCCE時。 – 2012-04-28 10:27:27

+0

@ user976754:您可以使用[此處](http://stackoverflow.com/a/10362719/230513)中引用的示例作爲[sscce](http://sscce.org/)的基礎。 – trashgod 2012-04-28 10:36:57

回答

0

爲什麼不嘗試使用油漆組件?

class imagePanel extends JPanel 
{ 
    BufferedImage image; 
    public void paintComponent(Graphics g) 
    { 
    super.paintComponent(g); 
    if(image != null) 
    { 
     g.drawImage(image, 0, 0, this); 
    } 
    } 
} 
+0

其實imagePanel是JPanel的一個對象。我可以調用它的paintComponent方法,但它會爲Graphics g在它的論點... – user976754 2012-04-28 09:41:25

0

可能有幾個原因。你可以試試

imagePanel.invalidate() 

在repaint調用之前強制它重繪。

或者可能標籤很小,需要調整大小,因爲之前可能沒有圖像。您可以嘗試調用

frame.pack(); 

方法來獲取框架以重新計算其組件大小。

或者你可以嘗試強制標籤的大小(設置其最小尺寸),以確保它有足夠的空間來顯示圖像。

+0

感謝這兩個metohds工作,我可以加載圖像。但問題是我在我的框架中添加了兩個面板。我想在imagePanel的邊界內加載圖像。但在這裏,在加載圖像後,第二個面板從其位置移開,並且imagePanel佔據最多的幀位置。如何限制這一點。 – user976754 2012-04-28 09:49:11

+0

總是很棘手,以獲得正確的佈局。你可以在第一個面板上使用set max size來防止它移動太多,並將圖像面板放在jscrollpane中 - 這意味着如果圖像變得太大,它將引入滾動條。或者,您可以在用戶選擇圖像之前將佔位符圖像加載到第一個面板中,以便一旦選擇了一個圖像,gui就不會移動,並且在用戶選擇太大的圖像時再次使用jscrollpane(否則使用縮放一些java庫) – 2012-04-28 13:09:10

2

問題是我在框架中添加了兩個面板。

您可以將您正在做的與使用兩個面板的完整example進行比較:左側的文件選擇器和右側的顯示面板。

1

我想這可能會幫助你...

Object selectedItem = jComboBox14.getSelectedItem(); 
ImageIcon picturetoInsert = new ImageIcon(selectedItem.toString()); 
JLabel label = new JLabel("", picturetoInsert, JLabel.CENTER); 
JPanel panel = new JPanel(new GridLayout(1, 1)); 
panel.add(label, BorderLayout.CENTER); 
jInternalFrame22.getContentPane(); 
jInternalFrame22.setContentPane(panel); 
jInternalFrame22.setVisible(true);