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. ...
随机推荐
- @Inject注解
在看eureka的源码看到了这个注解,百度一下说这个和autowored差不多, import javax.inject.Inject;import javax.inject.Singleton; @ ...
- git不显示提交代码
今天提交代码找不到提交的具体代码,找了好半天,最后发现是右边能下拉能拉下去,尴尬.
- wget 命令用法
wget 命令用法 1. 用法/命令格式 wget [OPTION]... [URL]... wget [参数列表] [目标软件.网页的网址] 长选项所必须的参数在使用短选项时也是必须的 2. 常用参 ...
- Git五个常见问题及解决方法
一.删除远程仓库上被忽略的文件 由于种种原因,一些本应该被忽略的文件被我们误操作提交到了远程仓库了.那么我们该怎么删除这些文件呢? 以误提交了.idea目录为例,我们可以通过下面的步骤处理: 1)我们 ...
- MySQL全面瓦解29:使用Partition功能实现水平分区
1 回顾 上一节我们详细讲解了如何对数据库进行分区操作,包括了 垂直拆分(Scale Up 纵向扩展)和 水平拆分(Scale Out 横向扩展) ,同时简要整理了水平分区的几种策略,现在来回顾一下. ...
- Java中static关键字声明的静态内部类与非静态内部类的区别
(1)内部静态类不需要有指向外部类的引用.但非静态内部类需要持有对外部类的引用.(2)非静态内部类能够访问外部类的静态和非静态成员.静态类不能访问外部类的非静态成员.他只能访问外部类的静态成员.(3) ...
- 日常Java 2021/10/21
Java Iterator(迭代器) 如果需要使用iterator类需要从java.util包中引入它 Java Iterator不是一个集合,它是一种访问集合的方法,用于迭代ArrayList和Ha ...
- [项目总结]Android 手动显示和隐藏软键盘
1.方法一(如果输入法在窗口上已经显示,则隐藏,反之则显示) 1 InputMethodManager imm = (InputMethodManager) getSystemService(Cont ...
- Hibernate 总结(转)
JMX:Java Management Extensions.JCA: J2EE Contector ArchitectureJNDI: Java Namind and Directory Inter ...
- dom4j解析XML学习
原理:把dom与SAX进行了封装 优点:JDOM的一个智能分支.扩充了其灵活性增加了一些额外的功能. package com.dom4j.xml; import java.io.FileNotFoun ...