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. ...
随机推荐
- shell常用集锦
该文整理一些常用的shell用法,及语法,并非介绍如何使用 变量 变量可分为两类:环境变量ENV(全局)和局部变量. bash环境变量 变量名 含义 _= 上一条命令的最后一个参数 BASH_VERS ...
- 【原】MDC日志链路设计
背景 我们项目中现有日志系统,采用的是slf4j+logback这套日志组件,也是Java生态里面比较常用的一个日志组件,但是随着分布式的演进,这套组件明显存在以下几个问题: 1.各种无关日志穿行其中 ...
- Codeforces 848E - Days of Floral Colours(分治 FFT)
Codeforces 题目传送门 & 洛谷题目传送门 神仙 D1E,一道货真价实的 *3400 %%%%%%%%%%%% 首先注意到一点,由于该图为中心对称图形,\(1\sim n\) 的染色 ...
- 【2020五校联考NOIP #6】三格缩进
题意: 给出 \(n\) 个数 \(a_1,a_2,\dots,a_n\),你要进行 \(m\) 次操作,每次操作有两种类型: \(1\ p\ x\):将 \(a_p\) 改为 \(x\). \(2\ ...
- JSOI(联合省选)2021 划水记
流水账. Day 0 18:10 去本部拿准考证,结果发现已经没有人了./ruo 敲了几份板子,很早就去睡觉了. Day 1 7:30 到 NFLS 拿到准考证,几乎没有人来.于是做起了政治作业. 然 ...
- 文件/目录对比:diff命令
命令格式 diff [参数] [文件1或目录1] [文件2或目录2] Linux diff命令用于比较文件的差异. diff以逐行的方式,比较文本文件的异同处. 如果指定要比较目录,diff会比较目录 ...
- Java的那些小事
一,JDK和JRE有什么区别? JRE:Java Runtime Environment(java运行时环境).即java程序的运行时环境,包含了java虚拟机,java基础类库. JDK:Java ...
- day06 视图层
day06 视图层 今日内容 视图层 小白必会三板斧 JsonResponse form表单发送文件 FBV与CBV FBV基于函数的视图 CBV基于类的视图 模板层 模板语法的传值 模板语法之过滤器 ...
- css系列,选择器权重计算方式
CSS选择器分基本选择器(元素选择器,类选择器,通配符选择器,ID选择器,关系选择器), 属性选择器,伪类选择器,伪元素选择器,以及一些特殊选择器,如has,not等. 在CSS中,权重决定了哪些CS ...
- C++11的auto自动推导类型
auto是C++11的类型推导关键字,很强大 例程看一下它的用法 #include<vector> #include<algorithm> #include<functi ...