java swing 怎么在jPanel1中显示jFileChooser1选择的图片

maomaosdo0704 2015-05-12 08:34:21

private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {

FileNameExtensionFilter filter = new FileNameExtensionFilter(
"*.jpg,*.png,*.bmp,*.tiff", "jpg", "png", "bmp", "tiff");
jFileChooser1.setFileFilter(filter);
if (JFileChooser.APPROVE_OPTION == jFileChooser1.showOpenDialog(this))

现在写出这些,用的swing添加了如下组件


因为要实现图片的保存所以没有用到label,下面我该怎么写才能实现panel中显示图片??

跪求大大们了,毕业设计做图像处理,已经在这里卡了4天了QAQ
...全文
276 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
maomaosdo0704 2015-05-15
  • 打赏
  • 举报
回复
引用 9 楼 foolishdault 的回复:
import java.awt.Component;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;

public class HelloWorld {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        EventQueue.invokeLater(new Runnable() {
            
            @Override
            public void run() {
                // TODO Auto-generated method stub
                JFrame frame = new ImageViewerFrame();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setVisible(true);
            }
        });
    }
}

class ImageViewerFrame extends JFrame{
    public ImageViewerFrame(){
        setTitle("ImageViewer");
        setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
        label = new JLabel();
        add(label);
        chooser = new JFileChooser();
        chooser.setCurrentDirectory(new File("."));
        JMenuBar menubar = new JMenuBar();
        setJMenuBar(menubar);
        JMenu menu = new JMenu("File");
        menubar.add(menu);
        JMenuItem openItem = new JMenuItem("Open");
        menu.add(openItem);
        JMenuItem exitItem = new JMenuItem("Close");
        menu.add(exitItem);
        openItem.addActionListener(new ActionListener() {
            
            @Override
            public void actionPerformed(ActionEvent arg0) {
                // TODO Auto-generated method stub
                int result = chooser.showOpenDialog(null);
                if(result == JFileChooser.APPROVE_OPTION){
                    String name = chooser.getSelectedFile().getPath();
                    label.setIcon(new ImageIcon(name));
                }
            }
        });
        exitItem.addActionListener(new ActionListener() {
            
            @Override
            public void actionPerformed(ActionEvent arg0) {
                // TODO Auto-generated method stub
                System.exit(0);
            }
        });
    }
    private JLabel label;
    private JFileChooser chooser;
    private static final int DEFAULT_WIDTH = 300;
    private static final int DEFAULT_HEIGHT = 400;
}
您好 请问如何设置label显示的图片居中且根据窗口的大小缩放??
maomaosdo0704 2015-05-15
  • 打赏
  • 举报
回复

jPanel1 = new PaintImage();

FileNameExtensionFilter filter = new FileNameExtensionFilter(
				"*.jpg,*.png,*.bmp,*.tiff", "jpg", "png", "bmp", "tiff", "tif");
		jFileChooser1.setFileFilter(filter);
		int result = jFileChooser1.showOpenDialog(this);
		if (result == JFileChooser.APPROVE_OPTION) {
			file = jFileChooser1.getSelectedFile();
			((PaintImage) jPanel1).setImageFile(file);
		}
PaintImage.java:

import java.awt.Graphics;

import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.awt.image.BufferedImage;
import java.awt.image.ImageProducer;
import java.io.File;
import java.io.IOException;


import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JPanel;


public class PaintImage extends JPanel {
	protected File imgFile;
	protected Image image;
	protected BufferedImage buffimg;
	protected ImageIcon img;
	
	public PaintImage(){
		super();
		addComponentListener(new ComponentAdapter(){
			public void componentResized(ComponentEvent e){
				repaint();
			}
		});
	}
	
	public File getImageFile(){
		return imgFile;
	}
	
	public void setImageFile(File newImgFile){
		try {
		imgFile = newImgFile;
		buffimg = ImageIO.read(imgFile);
		ImageProducer producer = buffimg.getSource();
		Toolkit toolkit = Toolkit.getDefaultToolkit();
		image = toolkit.createImage(producer);
		ImageIcon newImg = new ImageIcon(image);
		setImage(newImg);
		}catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	public void setImage(ImageIcon newImg){
		img = newImg;
		repaint();
	}
	public void paintComponent(Graphics g){
		super.paintComponent(g);
		
		if(img != null){
			Util.paintImg(this, g, img);
		}
	}
}
Util.java:

import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JMenuBar;
import javax.swing.SwingUtilities;
import javax.swing.ImageIcon;

public class Util
{
	
	public static void createAndShowGUI(JComponent c, JMenuBar b)
	{
		JFrame f = new JFrame();
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.setTitle(c.getClass().getName().replaceAll("\\w+\\.",""));
		f.setJMenuBar(b);
		f.getContentPane().add(c);
		f.pack();
		f.setVisible(true);
		f.setLocationRelativeTo(null);
	}
	
	public static void run(final JComponent c, final JMenuBar b)
	{
		SwingUtilities.invokeLater(new Runnable(){
			public void run()
			{
				createAndShowGUI(c, b);
			}
		});
	}
	
	public static void paintImg(JComponent c, Graphics g, ImageIcon img)
	{
		paintImg(c, g, img, c.getWidth(), c.getHeight());
	}
	
	public static void paintImg(JComponent c, Graphics g, ImageIcon img, int x, int y)
	{
		int X = x-x/10;
		int Y = y-y/10;
		ImageIcon imgX, imgXY;
		if(img.getIconWidth()>X){
			imgX = new ImageIcon(img.getImage().getScaledInstance(X, -1, Image.SCALE_SMOOTH));
		}
		else{
			imgX = img;
		}
		if(imgX.getIconHeight()>Y){
			imgXY = new ImageIcon(imgX.getImage().getScaledInstance(-1, Y, Image.SCALE_SMOOTH));
		}
		else{
			imgXY = imgX;
		}
		
		imgXY.paintIcon(c, g, x/2-imgXY.getIconWidth()/2, y/2-imgXY.getIconHeight()/2);
	}
}
maomaosdo0704 2015-05-15
  • 打赏
  • 举报
回复
引用 8 楼 zys59 的回复:
这应该是类型不匹配造成的,你检查下赋值的情况。要不你把你的项目打包一下发给我,我调试下。
您好 现在用了另一个方法可以显示了 但是不知道怎么保存
铁匠梁老师 2015-05-14
  • 打赏
  • 举报
回复
import java.awt.Component;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;

public class HelloWorld {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        EventQueue.invokeLater(new Runnable() {
            
            @Override
            public void run() {
                // TODO Auto-generated method stub
                JFrame frame = new ImageViewerFrame();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setVisible(true);
            }
        });
    }
}

class ImageViewerFrame extends JFrame{
    public ImageViewerFrame(){
        setTitle("ImageViewer");
        setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
        label = new JLabel();
        add(label);
        chooser = new JFileChooser();
        chooser.setCurrentDirectory(new File("."));
        JMenuBar menubar = new JMenuBar();
        setJMenuBar(menubar);
        JMenu menu = new JMenu("File");
        menubar.add(menu);
        JMenuItem openItem = new JMenuItem("Open");
        menu.add(openItem);
        JMenuItem exitItem = new JMenuItem("Close");
        menu.add(exitItem);
        openItem.addActionListener(new ActionListener() {
            
            @Override
            public void actionPerformed(ActionEvent arg0) {
                // TODO Auto-generated method stub
                int result = chooser.showOpenDialog(null);
                if(result == JFileChooser.APPROVE_OPTION){
                    String name = chooser.getSelectedFile().getPath();
                    label.setIcon(new ImageIcon(name));
                }
            }
        });
        exitItem.addActionListener(new ActionListener() {
            
            @Override
            public void actionPerformed(ActionEvent arg0) {
                // TODO Auto-generated method stub
                System.exit(0);
            }
        });
    }
    private JLabel label;
    private JFileChooser chooser;
    private static final int DEFAULT_WIDTH = 300;
    private static final int DEFAULT_HEIGHT = 400;
}
maomaosdo0704 2015-05-13
  • 打赏
  • 举报
回复
自顶!!!!!!
maomaosdo0704 2015-05-13
  • 打赏
  • 举报
回复
引用 3 楼 zys59 的回复:

import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.filechooser.FileNameExtensionFilter;
/**
 * @author zys59三仙半(QQ:597882752) 创建时间:2015年5月13日 上午8:32:17
 */
public class TestFileChooser extends JFrame implements ActionListener {

	public static void main(String[] args) {
		new TestFileChooser().setVisible(true);
	}

	private JButton btn;
	private MyPanel1 panel;

	public TestFileChooser() {
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setSize(500, 400);
		this.setLocation(100, 100);
		this.setResizable(false);
		this.setLayout(null);

		btn = new JButton("打开");
		btn.setSize(75, 30);
		btn.setLocation(10, 10);
		btn.addActionListener(this);
		add(btn);

		panel = new MyPanel1();
		panel.setLocation(10, 50);
		panel.setSize(470, 310);
		add(panel);
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		JFileChooser chooser = new JFileChooser();
		FileNameExtensionFilter filter = new FileNameExtensionFilter("图片文件", "jpg", "png", "bmp");
		chooser.setFileFilter(filter);
		if (chooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
			File picFile = chooser.getSelectedFile();
			//选择图片后,让面板显示图片
			panel.setImage(picFile);
		}
	}
}
//此类用于显示选中的图片
class MyPanel extends JPanel {
	private BufferedImage img = null;
	//这个方法被外部调用,设置新图片
	public void setImage(File picFile) {
		try {
			//载入图片
			img = ImageIO.read(picFile);
			//新图片载入完毕,申请重绘
			repaint();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	@Override
	public void paint(Graphics g) {
		//擦除原来的图片
		g.clearRect(0, 0, this.getWidth(), this.getHeight());
		// 根据比例绘制图片
		if (img != null) {
			//drawImage()有若干重载,根据需要选用,当前这种用法,是让新载入的图片适应Panel的尺寸
			g.drawImage(img, 0, 0, this.getWidth() - 1, this.getHeight() - 1,
					0, 0, img.getWidth() - 1, img.getHeight() - 1, this);
		}
	}
}
panel.setImage会报错。。。
maomaosdo0704 2015-05-13
  • 打赏
  • 举报
回复
panel.setImage会报错。。。
三仙半 2015-05-13
  • 打赏
  • 举报
回复

import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.filechooser.FileNameExtensionFilter;
/**
 * @author zys59三仙半(QQ:597882752) 创建时间:2015年5月13日 上午8:32:17
 */
public class TestFileChooser extends JFrame implements ActionListener {

	public static void main(String[] args) {
		new TestFileChooser().setVisible(true);
	}

	private JButton btn;
	private MyPanel1 panel;

	public TestFileChooser() {
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setSize(500, 400);
		this.setLocation(100, 100);
		this.setResizable(false);
		this.setLayout(null);

		btn = new JButton("打开");
		btn.setSize(75, 30);
		btn.setLocation(10, 10);
		btn.addActionListener(this);
		add(btn);

		panel = new MyPanel1();
		panel.setLocation(10, 50);
		panel.setSize(470, 310);
		add(panel);
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		JFileChooser chooser = new JFileChooser();
		FileNameExtensionFilter filter = new FileNameExtensionFilter("图片文件", "jpg", "png", "bmp");
		chooser.setFileFilter(filter);
		if (chooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
			File picFile = chooser.getSelectedFile();
			//选择图片后,让面板显示图片
			panel.setImage(picFile);
		}
	}
}
//此类用于显示选中的图片
class MyPanel extends JPanel {
	private BufferedImage img = null;
	//这个方法被外部调用,设置新图片
	public void setImage(File picFile) {
		try {
			//载入图片
			img = ImageIO.read(picFile);
			//新图片载入完毕,申请重绘
			repaint();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	@Override
	public void paint(Graphics g) {
		//擦除原来的图片
		g.clearRect(0, 0, this.getWidth(), this.getHeight());
		// 根据比例绘制图片
		if (img != null) {
			//drawImage()有若干重载,根据需要选用,当前这种用法,是让新载入的图片适应Panel的尺寸
			g.drawImage(img, 0, 0, this.getWidth() - 1, this.getHeight() - 1,
					0, 0, img.getWidth() - 1, img.getHeight() - 1, this);
		}
	}
}
三仙半 2015-05-13
  • 打赏
  • 举报
回复
重写Panel的paint(g)方法,然后,用Graphics的drawImage()方法,把图片绘制上去。
三仙半 2015-05-13
  • 打赏
  • 举报
回复
这应该是类型不匹配造成的,你检查下赋值的情况。要不你把你的项目打包一下发给我,我调试下。
maomaosdo0704 2015-05-13
  • 打赏
  • 举报
回复
引用 6 楼 zys59 的回复:
那个程序报错了?是我的那个程序,还是按我的这个思路改造了你的程序。
改造以后的 报的是javax.swing.JPanel cannot be cast to MyPanel 这是什么情况??
三仙半 2015-05-13
  • 打赏
  • 举报
回复
那个程序报错了?是我的那个程序,还是按我的这个思路改造了你的程序。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧