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. ...
随机推荐
- mabatis的mapper文件找不到-ssm升级maven常见问题
手里项目之前是普通ssm的,打算用业余时间升级一把. 1.首先,搭建好maven的ssm项目. 2.配置好jdk,tomcat环境,先启动. 3.启动没问题后将maven目录结构布置好后直接将原有项目 ...
- x86汇编反编译到c语言之——(1)表达式求值及赋值语句
一. 反编译一种可能的实现方式 我们的目的是将多种平台的汇编如x86,ARM,6502反编译为c语言,所以实现时先将多种汇编转化为 特定虚拟机汇编语言,然后只需要将虚拟机汇编语言反编译为c语言.其中多 ...
- 『学了就忘』Linux文件系统管理 — 57、Linux文件系统介绍
目录 1.了解硬盘结构(了解即可) (1)硬盘的逻辑结构 (2)硬盘接口 2.Linux文件系统介绍 (1)Linux文件系统的特性 (2)Linux常见文件系统 3.整理一下对文件系统的认识 在了解 ...
- IDEA 2021.2.3 安装与破解教程
首先说明,大部分情况下,花10块钱都可以在淘宝找人直接帮你完美解决这个资源问题 所以千万不要相信一些所谓的百度结果,一般都是花费了时间却最后无法解决破解的问题 我相信任何一个想要学习软件开发的人一定要 ...
- APIO2020 打铁记
Day (-3) - 2020.8.11 马上要 APIO 了,不管三七二十一先刷一套历年的 APIO 再说. 花了 3h 写了 APIO2019,爆零150左右,然后查看了一下去年的分数线,Cu 1 ...
- AtCoder Beginner Contest 204
身败名裂了,\(AK\)场转掉分场. 都是水题不说了. 这篇文鸽了.
- Codeforces 679E - Bear and Bad Powers of 42(线段树+势能分析)
Codeforces 题目传送门 & 洛谷题目传送门 这个 \(42\) 的条件非常奇怪,不过注意到本题 \(a_i\) 范围的最大值为 \(10^{14}\),而在值域范围内 \(42\) ...
- LOJ 2372 -「CEOI2002」臭虫集成电路公司(轮廓线 dp)
题面传送门 u1s1 似乎这题全网无一题解?那就由我来写篇题解造福人类罢(伦敦雾 首先看这数据范围,一脸状压.考虑到每一层的状态与上面两层有关,因此每层转移到下一层的有用信息只有两层,需要用三进制保存 ...
- /etc/sudoers 文件
sudo的权限控制可以在/etc/sudoers文件中查看到 如果想要控制某个用户(或某个组用户)只能执行root权限中的一部分命令, 或者允许某些用户使用sudo时不需要输入密码 格式一般都是 ro ...
- C++你不知道的事
class A { public: A() { cout<<"A's constructor"<<endl; } virtual ~A() { cout&l ...