web-dev-qa-db-ja.com

JFrameでBufferedImageを表示するにはどうすればよいですか?

同じJFrameに同じ画像のバリエーションを表示したい。たとえば、JFrameに画像を表示してから、同じ画像のグレースケールに置き換えたい。

16
anon

画像を更新するたびに、JFrameを再描画する必要があります。

これが、トピックに関する簡単なグーグルが持ち出すものです:(私はすべてのJavaコーディングにこれらのチュートリアルを使用します)

Javaチュートリアル:画像の描画

7
ldog

Camickrのソリューションを構築するための簡単なコードをコピー/貼り付けしたい私のような怠惰な人のために、以下にコードの図を示します。

JFrame frame = new JFrame();
frame.getContentPane().setLayout(new FlowLayout());
frame.getContentPane().add(new JLabel(new ImageIcon(img)));
frame.getContentPane().add(new JLabel(new ImageIcon(img2)));
frame.getContentPane().add(new JLabel(new ImageIcon(img3)));
frame.pack();
frame.setVisible(true);
//frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // if you want the X button to close the app
40
Ian Will

質問の内容がよくわかりませんが、BufferedImageがある場合は、その画像を使用してImageIconを作成し、アイコンをJLabelに追加し、他のコンポーネントと同様にGUIにラベルを追加します。

グレースケールの作成方法について質問がある場合は、これらの用語を検索キーワードとして使用してWebを検索することをお勧めします。きっとそこに例が見つかるはずです。

4
camickr

念のために、あまりにも短期間で公式ドキュメントを読んでください。ここに、何度もやり直すための汚い方法があります。

private static JFrame frame;
private static JLabel label;
public static void display(BufferedImage image){
   if(frame==null){
       frame=new JFrame();
       frame.setTitle("stained_image");
       frame.setSize(image.getWidth(), image.getHeight());
       frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
       label=new JLabel();
       label.setIcon(new ImageIcon(image));
       frame.getContentPane().add(label,BorderLayout.CENTER);
       frame.setLocationRelativeTo(null);
       frame.pack();
       frame.setVisible(true);
   }else label.setIcon(new ImageIcon(image));
}
1
LiNKeR