1

JPanelイメージをusingにロードしようとしています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();  
    }  
    }  

}

誰でもこれに光を当てることができますか?

4

4 に答える 4

2

問題は、フレームに 2 つのパネルを追加したことです。

2 つのパネル (左側にファイル チューザー、右側に表示パネル) を使用するこの完全なと、実行していることを比較することができます。

于 2012-04-28T10:33:40.400 に答える
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);
于 2012-06-09T07:28:14.350 に答える
0

これにはいくつかの理由が考えられます。あなたは試すことができます

imagePanel.invalidate()

repaint 呼び出しの前に、強制的に再描画します。

または、以前に画像がなかった可能性があるため、ラベルが小さすぎてサイズを変更する必要がある可能性があります。あなたは呼び出すことができます

frame.pack();

コンポーネント サイズを再計算するフレームを取得するメソッド。

または、ラベルのサイズを強制して (最小サイズを設定)、画像を表示するのに十分なスペースを確保することもできます。

于 2012-04-28T09:28:01.807 に答える
0

ペイントコンポーネントを試してみませんか?

class imagePanel extends JPanel
{ 
  BufferedImage image;
  public void paintComponent(Graphics g)
  {
    super.paintComponent(g);
    if(image != null)
    {
      g.drawImage(image, 0, 0, this);
    }
  }
}
于 2012-04-28T09:22:15.103 に答える