java 图形化工具Swing 颜色文件选择器 ;JColorChooser;JFileChoose
使用JColorChooser:
- (1),showDialog(Component component, String title, Color initialColor): 显示一个模式的颜色选择器对话框,该方法返回用户所选颜色。其中component指定该对话框的parent组件,而title指定该对话框的标题,大部分时候都使用该方法来让用户选择颜色。
- (2),createDialog(Component c, String title, boolean modal, JColorChooser chooserPane, ActionListener,okListener, ActionListener cancelListener): 该方法返回一个对话框,该对话框内包含指定的颜色选择器,该方法可以指定该对话框是模式的还是非模式的(通过 modal 参数指定) 还可以指定该对话框内"确定"按钮的事件监 器(通过 okListener 参数指定)和"取消"按钮的事件监听器 (通过 cancelLi tener 参数指定)。
fontColor = JColorChooser.showDialog(jframe,"请选择颜色",Color.red,true);
package swingtest; import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage; /**
* @ClassName DrawCanvasTest
* @projectName: object1
* @author: Zhangmingda
* @description: XXX
* date: 2021/5/8.
*/
public class DrawCanvasSwingTest {
/**
* 窗口
*/
private JFrame jframe = new JFrame("JFrame手绘程序");
/**
* 定义画板
*/
private final int canvasWidth = 600;
private final int canvasHeight = 400;
private Canvas canvas = new DrawCanvas();
/**
* 定义图片
*/
private BufferedImage image = new BufferedImage(canvasWidth,canvasHeight,BufferedImage.TYPE_INT_BGR);
/**
* 获取图片对应的画笔,画笔的初始位置,初始颜色
*/
private Graphics2D imageGraphics = (Graphics2D) image.getGraphics();
private int drawX = -1;
private int drawY = -1;
private Color fontColor = new Color(255);
/**
* 画笔右键菜单
*/
JPopupMenu jpopupMenu = new JPopupMenu();
JMenuItem colorChoseItem = new JMenuItem("选择颜色"); /**
* 定义画板子类,定义画图图片
*/
private class DrawCanvas extends Canvas {
@Override
public void paint(Graphics g) {
g.drawImage(image,0, 0, null);
}
} private void start(){
/**
* 画板大小设置
*/
canvas.setSize(canvasWidth, canvasHeight);
/**
* 设置画笔粗细
*/
imageGraphics.setStroke(new BasicStroke(5f));
/**
* 画笔右键菜单组合。添加到窗口,设置颜色选择器
*/
jpopupMenu.add(colorChoseItem); colorChoseItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent actionEvent) {
fontColor = JColorChooser.showDialog(jframe,"请选择颜色",Color.red,true);
}
});
/**
* 画板中图片背景画成白色
*/
imageGraphics.fillRect(0, 0, canvasWidth, canvasHeight);
/**
* 按下鼠标拖动时画图
*/
canvas.addMouseMotionListener(new MouseAdapter() {
//按下鼠标拖动
@Override
public void mouseDragged(MouseEvent e) {
/**
* 如果位置不在初始位置,开始画图
*/
if (drawX != -1 && drawY != -1){
imageGraphics.setColor(fontColor);
imageGraphics.drawLine(drawX, drawY, e.getX(), e.getY());
canvas.repaint();
}//移动画笔位置到当前鼠标位置
drawX = e.getX();
drawY = e.getY();
}
}); /**
* 松开鼠标画笔归位-1;-1;
*/
canvas.addMouseListener(new MouseAdapter() {
@Override
public void mouseReleased(MouseEvent e) {
drawX = -1;
drawY = -1;
//如果是右键松开弹出选择颜色的弹框
if (e.isPopupTrigger()){
jpopupMenu.show(canvas,e.getX(), e.getY());
}
}
}); /**
* 窗口关闭
*/
jframe.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
/**
* 窗口添加组件,设置位置大小,注意这里要把jframe要添加的组件中尺寸最大的最后添加,.pack() 才能调接到最大尺寸
*/
jframe.add(jpopupMenu);
jframe.add(canvas);
jframe.setLocation(400,300);
jframe.pack();
jframe.setVisible(true);
}
public static void main(String[] args) {
new DrawCanvasSwingTest().start();
}
}

JFileChooser:
JFileChooseer的使用步骤如下:
- 采用构造器创建一个JFileChooser对象,该JFileChooser对象无须指定parent组件,这表示可以在多个窗口中共用该JFileChooser对象。创建JFileChooser对象时可以指定初始化路径:JFileChooser chooser = new JFileChooser(".");
- 调用JFileChooser系列可选的方法对JFileChooser 执行初始化操作。
- setSelectedFile/setSelectedFiles: 指定该文件选择器默认选择的文件(也可以默认选择多个文件)。
- setFileSelectionMode(int mode): 在默认情况下,该文件选择器只能选择文件,通过调用该方法可以设置允许选择文件、路径、 文件与路径,设置参数值为JFileChooser.FILES_ONLY
JFileChooser.DlRECTORIES_ONLY
JFileChooser.FILES_AND_DIRECTORIES
- 用JFileChooser系列可选的方法对JFileChooser执行过滤器初始化操作:
- addChoosableFileFilter(FileFilter filter): 添加文件过滤器 通过该方法允许该文件对话框有多个文件过滤器。
- setFileFilter(FileFilter filter): 设置文件过滤器 。一旦调用了该方法,将导致该文件对话框只有过滤器
- 调用showXxxDialog方法可以打开文件对话框
JFileChooser jFileChooser = new JFileChooser(".");//文件选择器构造
jFileChooser.addChoosableFileFilter(new FileNameExtensionFilter("选择图片(*.jpg,*.png,*.gif,*.goubi)","jpg", "gif", "png","goubi")); //配置文件过滤器
jFileChooser.setAcceptAllFileFilterUsed(true); //设置接受所有文件过滤器
文件选择器的使用:
事件监听器触发文件选择器show展示在对应组件中,返回选择的结果进行判断和处理。
int result = jFileChooser.showOpenDialog(jFrame); 定义变量查看文件选择器选择后的结果
result == JFileChooser.APPROVE_OPTION 文件选择成功
jFileChooser.getSelectedFile().getPath();从文件选择器获取文件路径。做对应处理
知识点+:图片在JFrame组件JLabel组件中展示
JLabel label = new JLabel();
jFrame.add(label);
label.setIcon(new ImageIcon(openFilePath))
完整测试代码
package swingtest; import javax.swing.*;
import javax.swing.filechooser.FileNameExtensionFilter;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; /**
* @ClassName ImageShowSwing
* @projectName: object1
* @author: Zhangmingda
* @description: XXX
* date: 2021/5/9.
*/
public class ImageShowSwing {
public static void main(String[] args) {
JFrame jFrame = new JFrame("图片查看器");
JMenuBar menuBar = new JMenuBar();
JMenu fileMenu = new JMenu("文件");
JMenuItem openMenuItem = new JMenuItem("打开");
fileMenu.add(openMenuItem);
menuBar.add(fileMenu);
jFrame.setJMenuBar(menuBar); JLabel label = new JLabel();
jFrame.add(label); /**
* 文件过滤器设置:打开的默认文件路径.为当前路径
*/
JFileChooser jFileChooser = new JFileChooser(".");
/**
* 自定义文件过滤器,可以设置任何规则,比如以什么文件名开头,或者文件名结尾。
*/
// jFileChooser.addChoosableFileFilter(new FileFilter() {
// @Override
// public boolean accept(File f) {
// if (f.isDirectory()) {
// return true;
// }
// String name = f.getName().toLowerCase();
// List<String> extensions = Arrays.asList(".jpg", ".gif", ".png");
// for (String extension : extensions) {
// if (name.endsWith(extension)) {
// return true;
// }
// }
// return false;
// }
// @Override
// public String getDescription() {
// return "选择图片(*.jpg,*.png,*.gif)";
// }
// });
/**
* 使用已有文件名(后缀)过滤器 FileNameExtensionFilter(String description, String... extensions)
*/
jFileChooser.addChoosableFileFilter(new FileNameExtensionFilter("选择图片(*.jpg,*.png,*.gif,*.goubi)","jpg", "gif", "png","goubi"));
//让不能被文件过滤器过滤的文件,不展示在我们的这个选择对话框内
jFileChooser.setAcceptAllFileFilterUsed(true);
openMenuItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("点击了打开文件");
int result = jFileChooser.showOpenDialog(jFrame);
if (result == JFileChooser.APPROVE_OPTION) {//如果图片文件被打开了
String openFilePath = jFileChooser.getSelectedFile().getPath();
label.setIcon(new ImageIcon(openFilePath));
}
}
});
jFrame.setBounds(100, 100, 600, 600);
jFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
jFrame.setVisible(true);
}
}
java 图形化工具Swing 颜色文件选择器 ;JColorChooser;JFileChoose的更多相关文章
- java 图形化工具Swing 创建工具条
通过JToolBar来创建工具条: Swing提供了JToolBar类来创建工具条,创建JToolBar对象时可以指定如下两个参数: (1),name: 该参数指定该工具条的名称. (2),orien ...
- java 图形化工具Swing 基本使用
Swing介绍: 使用Swing开发图形界面比AWT更加优秀,因为Swing是一种轻量级组件,它采用100% Java实现,不再依赖于本地平台的图形界面,所以可以在所有平台上保持相同的运行效果,对跨平 ...
- java 图形化工具Swing 监听键盘输入字符触发动作getInputMap();getActionMap();
双缓冲技术的介绍: 所有的Swing组件默认启用双缓冲绘图技术.使用双缓冲技术能改进频繁重绘GUI组件的显示效果(避免闪烁现象)JComponent组件默认启用双缓冲,无须自己实现双缓冲.如果想关闭双 ...
- Java 图形化界面设计(GUI)实战练习(代码)
关于Java图形化界面设计,基础知识网上可搜,下面简单介绍一下重点概念,然后就由浅入深代码实例. 程序是为了方便用户使用的,Java引入图形化界面编程. 1.JFrame 是容器类 2.AWT 是抽象 ...
- 转:二十七、Java图形化界面设计——容器(JFrame)
转:http://blog.csdn.net/liujun13579/article/details/7756729 二十七.Java图形化界面设计——容器(JFrame) 程序是为了方便用户使用的, ...
- 二十七、Java图形化界面设计——容器(JFrame)
摘自http://blog.csdn.net/liujun13579/article/details/7756729 二十七.Java图形化界面设计--容器(JFrame) 程序是为了方便用户使用的, ...
- Java图形化界面设计——中间容器(Jpanel)
1. 将组件添加到JFrame中 方式之一: frame.getContentPane().add(childComponent) 用getContentPane()方法获得JFrame的内容面板, ...
- Java图形化界面设计——容器(JFrame)
Java图形化界面设计——容器(JFrame) 程序是为了方便用户使用的,因此实现图形化界面的程序编写是所有编程语言发展的必然趋势,在命令提示符下运行的程序可以让我们了解java程序的基本知识体系结构 ...
- 02 Java图形化界面设计——中间容器(Jpanel)
上一篇讲解了Jframe顶层容器,例子中生成了一个空的窗体,在实际编程过程中,一般很少将文本框.按钮等组件直接放在顶层容器中进行布局,大多数时候是通过布局管理器结合中间容器对组件进行布局设置. 1. ...
随机推荐
- 【PS】证件照修改尺寸
证件照同时修改尺寸.分辨率.像素 2019-07-14 12:56:25 by冲冲 1. 需求 实现证件照自由切换一寸.小一寸.大一寸.二寸. 2. 步骤 ① 裁剪工具 -- 原始比例 -- 存储 ...
- Codeforces Round #732 (Div.1) 题解
实在是打击人信心的一场比赛啊--一不注意就掉了 50+ 分,rating 没了啊/ll/dk/wq/kk A Weak pretest!!!!!11 /fn/fn/fn 一个很显然的注意点是在交换前后 ...
- Nginx编译安装相关参数
Nginx编译安装相关参数 Nginx插件安装 ------------------pcre------------------ cd /usr/local/source wget http://ww ...
- go定义接口以及类怎么使用接口
go定义接口以及类怎么使用接口 多态是指代码可以根据类型的具体实现采取不同行为的能力.如果一个类型实现了某个接口,所有使用这个接口的地方,都可以支持这种类型的值. 接口是用来定义行为的类型.这些被定义 ...
- Shell 变量嵌套
实现:eval 1 a="indv1" 2 indv1="Sus1" 3 4 eval tmp='$'$a 5 echo $tmp //这里 echo 返回值为 ...
- python(3)跳过第一行(多行)读入数据
查了下资料,常见两种办法,一是设置行号,再者是利用python自带的itertools工具. 这里推荐一种新的方法,直接使用readline()函数就搞定. 示例: 创建一个文本文件,内容如下: 1 ...
- C语言大小端判定
要判定大小端?需要弄清以下几个问题: 1.当一个变量占多个字节时,变量的指针指向的是低地址 2.什么是大小端? 大端模式:是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中. 小 ...
- navicate连接Mysql5.7时,显示Access denied for user 'root'@'localhost' (using password: YES) 错误
最近新装了Mysql5.7,按如下设置好了允许远程连接 (1)找到mysql配置文件并修改 sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf 将bind-ad ...
- 容器之分类与各种测试(四)——unordered_set和unordered_map
关于set和map的区别前面已经说过,这里仅是用hashtable将其实现,所以不做过多说明,直接看程序 unordered_set #include<stdexcept> #includ ...
- 【Linux】【Shell】【Basic】条件测试
1. 数值测试:数值比较 -eq:是否等于: [ $num1 -eq $num2 ] -ne:是否不等于: -gt:是否大于: -ge:是否大于等于: -lt:是否小于: -le:是否小于等于: 2. ...