JAVA笔记【20140102】

一、文件对话框

Swing中提供了JFileChooser类显示一个文件对话框,JFileChooser类不是JDialog的子类,其需要调用showSaveDialog或者showOpenDialog方法来显示保存文件的对话框或者打开文件的对话框。

当然也可以调用showDialog方法显示自定义标签的对话框。

建立JFileChooser对象,其不需要指定父组件,允许在多个框架中重用一个文件选择器。

JFileChooser fileChooser = new JFileChooser();

调用setCurrentDirectory方法设定目录

fileChooser.setCurrentDirectory(new File("."));  //此处设定目录为当前目录

如果希望预先选择默认的文件名,则调用setSelectedFile方法指定

fileChooser.setSelectedFile(new File(fileName));

如果允许在对话框中选择多个文件,则调用setMultiSelectionEnabled方法设定

fileChooser.setMultiSelectionEnabled(true);

默认情况对话框中只能选择文件,当然也可以设定选择目录,参数值为JFileChooser.FILES_ONLY,JFileChooser.DIRECTORIES_ONLY,JFileChooser.FILES_AND_DIRECTORIES。

fileChooser.setFileSelectionMode(JFileChooser.xxxxx);

若想限制对话框中显示的文件类型,则需要用到文件过滤器,抽象类javax.swing.filechooser.FileFilter。文件选择器把每个文件传递给文件过滤器,只有文件过滤器接受的文件才会显示出来。

编写专用文件过滤器

class GifFilter extends FileFilter
{
	public boolean accept(File f)
	{
		return f.getName().toLowerCase().endsWith("gif")||f.isDirectory();
	}
	public String getDescription()
	{
		return "GIF Only";
	}
}

将文件过滤器安装到文件选择对话框

fileChooser.addChoosableFileFilter(new GifFilter());

也可以为一个文件选择对话框安装多个过滤器。用户可以从文件对话框底部的组合框选择过滤器。默认情况下"All files"过滤器总是显示在组合框中。

如果想不使用All files过滤器,则调用setAcceptAllFileFilterUsed方法。

fileChooser.setAcceptAllFileFilterUsed(false);

如果为加载和保存不同类型的文件重用一个文件选择器,则调用resetChoosableFilters()方法就可以在加载新的过滤器之前清除旧的过滤器。

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.filechooser.*;
import javax.swing.filechooser.FileFilter;
import java.beans.*;
public class FileChooserTest01
{
	public static void main(String[] args)
	{
		FileChooserFrame fileChooserFrame = new FileChooserFrame();
		fileChooserFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		fileChooserFrame.setVisible(true);
	}
}

class FileChooserFrame extends JFrame
{
	public FileChooserFrame()
	{
		setTitle("file chooser test");
		setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);
		
		//处理菜单
		JMenuBar menuBar = new JMenuBar();
		JMenu fileMenu = new JMenu("File");
	  openMenuItem = new JMenuItem("Open");
		exitMenuItem = new JMenuItem("Exit");
		fileMenu.add(openMenuItem);
		fileMenu.add(exitMenuItem);
		menuBar.add(fileMenu);
		setJMenuBar(menuBar);
		//菜单添加监听器
		exitMenuItem.addActionListener(new exitActionListener());
		openMenuItem.addActionListener(new openActionListener());
		myPanel = new MyPanel();
		
		fileChooser = new JFileChooser();
		fileFilter = new FileNameExtensionFilter("Image only","JPG","JPEG");
		fileChooser.setCurrentDirectory(new File("."));
		fileChooser.addChoosableFileFilter(fileFilter);
		fileChooser.setSelectedFile(new File("2b.jpg"));
		fileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
		fileChooser.setMultiSelectionEnabled(true);
		//fileChooser.setAcceptAllFileFilterUsed(false);
		Toolkit kit = Toolkit.getDefaultToolkit();
		Image img = kit.getImage("test1.jpg");
		Image imgc = img.getScaledInstance(15,15,5);
		fileChooser.setFileView(new FileIconView(fileFilter,new ImageIcon(imgc)));
		fileChooser.setAccessory(new ImagePreView(fileChooser));
		
		add(myPanel,BorderLayout.CENTER);
	}
	class exitActionListener implements ActionListener
	{
		public void actionPerformed(ActionEvent e)
		{
			System.exit(0);
		}
	}
	class openActionListener implements ActionListener
	{
		public void actionPerformed(ActionEvent e)
		{
			int result = fileChooser.showOpenDialog(myPanel);
			if(result == JFileChooser.APPROVE_OPTION)
			{
				String name = fileChooser.getSelectedFile().getPath();
				myPanel.setFileName(name);
				repaint();
			}
		}
	}
	
	private static final int DEFAULT_WIDTH = 1000;
	private static final int DEFAULT_HEIGHT = 600;
	private JMenuItem openMenuItem;
	private JMenuItem exitMenuItem;
	private JFileChooser fileChooser;
	private FileFilter fileFilter;
	private MyPanel myPanel;
}

class FileIconView extends FileView
{
	public FileIconView(FileFilter fileFilter,Icon c)
	{
		this.fileFilter=fileFilter;
		icon=c;
	}
	
	public Icon getIcon(File f)
	{
		if(!f.isDirectory()&&fileFilter.accept(f))
		{
			return icon;
		}
		return null;
	}
	
	private FileFilter fileFilter;
	private Icon icon;
}

class ImagePreView extends JLabel
{
	public ImagePreView(JFileChooser f)
	{
		setPreferredSize(new Dimension(100,100));
		setBorder(BorderFactory.createEtchedBorder());
		f.addPropertyChangeListener(new PropertyChangeListener()
		                            {
		                            	public void propertyChange(PropertyChangeEvent e)
		                            	{
		                            		if(e.getPropertyName()==JFileChooser.SELECTED_FILE_CHANGED_PROPERTY)
		                            		{
		                            			File f = (File)e.getNewValue();
		                            			if(f==null)
		                            			{
		                            				setIcon(null);
		                            				return;
		                            			}
		                            			ImageIcon icon = new ImageIcon(f.getPath());
		                            			if(icon.getIconWidth()>getWidth())
		                            			{
		                            				icon = new ImageIcon(icon.getImage().getScaledInstance(getWidth(),-1,Image.SCALE_DEFAULT));
		                            			}
		                            			setIcon(icon);
		                            		}
		                            	}
		                            });
	}
}


class MyPanel extends JPanel
{
	public void paintComponent(Graphics g)
	{
		if(!fileName.equals(""))
		{
			ImageIcon icon = new ImageIcon(fileName);
			Image image = icon.getImage();
			super.paintComponent(g);
			if(image == null)
				return;
			Graphics2D gps2D = (Graphics2D)g ;
			gps2D.drawImage(image,0,0,getWidth(),getHeight(),null);
	  }
	}
	
	public void setFileName(String fileName)
	{
		this.fileName=fileName;
	}
	private String fileName="";
}

运行结果:



二、颜色选择器

Swing提供了选择器JColorChooser用于挑选颜色值。其与JFileChooser类似,是组件不是对话框。

显示模式对话框

Color selectedColor = JColorChooser.showDialog(parent,title,initialColor);

也可以调用createDialog方法显示无模式对话框

若需要颜色实时反馈,则需要获取选择器的选择模型并添加改变监听器。

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.event.*;
public class ColorChooserTest01
{
	public static void main(String[] args)
	{
		ColorChooserFrame ColorChooserFrame = new ColorChooserFrame();
		ColorChooserFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		ColorChooserFrame.setVisible(true);
	}
}

class ColorChooserFrame extends JFrame
{
	public ColorChooserFrame()
	{
		setTitle("Color chooser test");
		setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);
		ColorChoosePanel panel = new ColorChoosePanel();
		add(panel);
	}
	private static final int DEFAULT_WIDTH = 1000;
	private static final int DEFAULT_HEIGHT = 600;
}

class ColorChoosePanel extends JPanel
{
	public ColorChoosePanel()
	{
		JButton button1 = new JButton("button1");
		JButton button2 = new JButton("button2");
		JButton button3 = new JButton("button3");
		
		button1.addActionListener(new ColorListener1());
		button2.addActionListener(new ColorListener2());
		button3.addActionListener(new ColorListener3());
		
		add(button1);
		add(button2);
		add(button3);
	}
	
	class ColorListener1 implements ActionListener
	{
		public void actionPerformed(ActionEvent e)
		{
			Color defaultColor = getBackground();
			Color selected = JColorChooser.showDialog(ColorChoosePanel.this,"set background",defaultColor);
			if(selected != null)
				setBackground(selected);
		}
	}

	class ColorListener2 implements ActionListener
	{
		public ColorListener2()
		{
			chooser = new JColorChooser();
			dialog=chooser.createDialog(ColorChoosePanel.this,"set background",false,chooser,
			                     new ActionListener()
			                     {
			                     	public void actionPerformed(ActionEvent e)
			                     	{
			                     		setBackground(chooser.getColor());
			                     	}
			                     },null
			                     );
		}
		public void actionPerformed(ActionEvent e)
		{
			chooser.setColor(getBackground());
			dialog.setVisible(true);
		}
		private JDialog dialog;
		private JColorChooser chooser;
	}

	class ColorListener3 implements ActionListener
	{
		public ColorListener3()
		{
			chooser = new JColorChooser();
			chooser.getSelectionModel().addChangeListener(
				new ChangeListener()
				{
					public void stateChanged(ChangeEvent e)
					{
						setBackground(chooser.getColor());
					}
				}
			);
			dialog=new JDialog((Frame)null,false);
			dialog.add(chooser);
			dialog.pack();
		}
		public void actionPerformed(ActionEvent e)
		{
			chooser.setColor(getBackground());
			dialog.setVisible(true);
		}
		private JDialog dialog;
		private JColorChooser chooser;
	}

}

运行结果:





  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值