Swing提供了JColorChooser和JFileChooser这两种对话框,可以很方便的完成演示的选择和本地文件的选择。
1.JColorChooser
JColorChooser用于创建颜色选择器对话框,该类的用法非常简单,只需要调用它的静态方法就可以快速生成一个颜色选择对话框:
public static Color showDialog(Component component, String title,color initialColor)
/*
参数:
component:指定当前对话框的父组件
title:当前对话框的名称
initialColor:指定默认选中的颜色
返回值:
返回用户选中的颜色
*/
package com.aynu.layout;
import javax.swing.*;
import java.awt.*;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
public class JColorChooserDemo {
JFrame jFrame =new JFrame("测试颜色选择器");
JTextArea jta =new JTextArea("我爱中华",8,30);
//声明按钮
JButton btn = new JButton(new AbstractAction("改变文本框背景颜色") {
@Override
public void actionPerformed(ActionEvent e) {
//弹出一个颜色选择器
Color result = JColorChooser.showDialog(jFrame, "颜色选择器", Color.white);
//修改文本框背景
jta.setBackground(result);
}
});
public void init(){
//组装视图
jFrame.add(jta);
jFrame.add(btn, BorderLayout.SOUTH);
jFrame.setDefaultCloseOperation(jFrame.EXIT_ON_CLOSE);
jFrame.pack();
jFrame.setVisible(true);
}
public static void main(String[] args) {
new JColorChooserDemo().init();
}
}
2.JFileChooser
JFileChooser的功能与AWT中的FileDialog基本相似,也是用于生成"打开文件"、"保存文件"对话框。与FileDialog不同的是,与JFileChooser无需依赖于本地平台的GUI,它由100%纯java实现,在所有平台上具有完全相同的行为,并可以在所有平台上具有相同的外观风格。
JFileChooser的使用步骤
1.创建JFileChooser对象:
JFileChooser chooser = new JFileChooser("D:\\a");//指定默认打开的本地磁盘路径
2.调用FileChooser的一系列可选方法,进行初始化
setSelectedFile(File file)/setSelectedFiles(File[ ] selectedFiles):设定默认选中的文件
setMultiSelectionEnabled(boolean b):设置是否允许多选,默认是单选
setFileSelectionMode(int mode):设置可以选择内容,例如文件、文件夹等,默认只能选择文件
3.打开文件对话框
showOpenDialog(Component parent):打开文件加载对话框,并指定父组件
showSaveDialog(Component parent):打开文件保存对话框,并指定父组件
4.获取用户选择的结果
File getSelectedFile():获取用户选择的一个文件
File[ ] getSelectedFiles():获取用户选择的多个文件
package com.aynu.layout;
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
public class JFileChooserDemo {
//创建窗口对象
JFrame jf = new JFrame("测试JFileChooser");
//创建菜单条
JMenuBar jmb = new JMenuBar();
//创建菜单
JMenu jMenu = new JMenu("文件");
//创建菜单项
JMenuItem open = new JMenuItem(new AbstractAction("打开") {
@Override
public void actionPerformed(ActionEvent e) {
//显示一个文件选择器
JFileChooser fileChooser = new JFileChooser(".");
fileChooser.showOpenDialog(jf);
//获取用户选择的文件
File file = fileChooser.getSelectedFile();
//进行显示
try {
image = ImageIO.read(file);
drawArea.repaint();
} catch (IOException ex) {
throw new RuntimeException(ex);
}
}
});
JMenuItem save = new JMenuItem(new AbstractAction("另存为") {
@Override
public void actionPerformed(ActionEvent e) {
//显示一个文件选择器
JFileChooser fileChooser = new JFileChooser(".");
fileChooser.showSaveDialog(jf);
//获取用户选择的保存文件路径
File file = fileChooser.getSelectedFile();
//进行保存
try {
ImageIO.write(image,"jpeg",file);
} catch (IOException ex) {
throw new RuntimeException(ex);
}
}
});
BufferedImage image;
//Swing提供的图片,都使用了图像缓冲区技术
private class MyCanvas extends JPanel{
@Override
public void paint(Graphics g) {
//把图片绘制的组件上即可
g.drawImage(image,0,0,null);
}
}
MyCanvas drawArea = new MyCanvas();
public void init(){
//组装视图
jMenu.add(open);
jMenu.add(save);
jmb.add(jMenu);
jf.setJMenuBar(jmb);
drawArea.setPreferredSize(new Dimension(740,500));
jf.add(drawArea);
//显示jf
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.pack();
jf.setVisible(true);
}
public static void main(String[] args) {
new JFileChooserDemo().init();
}
}