2016-08-26 12 views
1

私はこのように初期化されGridBagConstraints gbcImageJLabelがあります。パネルはJFrameに追加されJPanelにImageIconが表示されないのはなぜですか?

gbcImage.gridx = 1; // column 0 
gbcImage.gridy = 2; // row 2 
gbcImage.ipady = 100; 
gbcImage.ipadx = 100; 
JLabel label = new JLabel("", null, JLabel.CENTER); 
label.setOpaque(true); 
label.setBackground(Color.WHITE); 
panel.add(label, gbcImage); 

を。

だから私は、ラベルにMouseListenerを実装:

public void mouseClicked(MouseEvent e) { 
      JFileChooser jfc = new JFileChooser(); 

      int iRet = jfc.showOpenDialog(panel); 
      if (iRet == jfc.APPROVE_OPTION) 
      { 
       File file = jfc.getSelectedFile(); 

       try 
       { 
        BufferedImage bi = ImageIO.read(file); 
        image = new ImageIcon(bi); 
        JLabel label = new JLabel("", image, JLabel.CENTER); 
        panel.add(label, gbcImage); 
       } 
       catch (IOException e1) 
       { 
        e1.printStackTrace(); 
       } 
      } 
     } 

しかし、それは動作しませんでした。実行時にイメージがパネルに表示されません。

私には何が欠けていますか?

+0

があなたのJPanelのためのLayoutManagerを指定していますか? – ACV

+0

1)すぐに役立つように、[MCVE]または[短く、自己完結型の正しい例](http://www.sscce.org/)を投稿してください。 2)画像を取得する方法の1つは、[このQ&A](http://stackoverflow.com/q/19209650/418556)に表示されている画像にホットリンクすることです。 –

答えて

3

新しいJLabelを作成する必要はありません。問題はパネルに新しいラベルを追加したことですが、reavalidate()repaint()のパネルがないため、デフォルトサイズは(0、0)です。

新しいラベルを作成する必要はありません。

代わりにあなたは、元のラベルへの参照を保持します(パネルのために行うように)、その後、あなただけのアイコンを置き換える:

image = new ImageIcon(bi); 
label.setIcon(image); 
+0

ありがとう!それは完全に動作します! –

関連する問題