首页 > 编程语言 >第二十章《Java Swing》第8节:选择器

第二十章《Java Swing》第8节:选择器

时间:2022-12-17 10:07:07浏览次数:39  
标签:文件 20 Exam20 Java Swing new 选择器 JFileChooser


在Swing体系中有文件选择器和颜色选择器,它们分别用来帮助用户选择文件和颜色,这些选择操作是可视化桌面应用程序常用的操作,本小节将详细讲解这两种选择器的使用方式。

20.8.1文件选择器JFileChooser

文件选择器用于选择文件或文件夹。当用户打开一个文件时需要用文件选择器选择一个文件,而保存文件时又需要用文件选择器去选择一个文件夹。Swing体系用JFileChooser类来表示文件选择器。通常情况下,文件选择器都是以一个模态对话框的形式出现。

JFileChooser有一个无参数的构造方法,使用这个构造方法创建对象的语句是:

JFileChooser fileChooser = new JFileChooser();

使用以上语句所创建的fileChooser对象会以系统默认的路径打开文件选择器,程序员也可以在构造方法中指定了文件选择器的打开路径,例如:

JFileChooser fileChooser = new JFileChooser("D:/");

使用以上语句所创建的ileChooser对象会以D盘根目录打开文件选择器。

弹出选择文件的模态对话框的方法被定义在JFileChooser类中,它们分别是showOpenDialog()、showSaveDialog()和showDialog()。showOpenDialog()方法所弹出的对话框上标题和按钮的文本都是“打开”,而showSaveDialog()方法所弹出的对话框上标题和按钮的文本都是“保存”。使用showDialog()方法则可以自定义对话框上的标题和按钮文本。以上三个方法的返回值均为int型,这个返回值表示了用户在对话框上点击了那个按钮。如果用户点击了“打开”或“保存”按钮,在方法的返回值为0,一般以JFileChooser类的静态属性APPROVE_OPTION表示这个返回值,而用户如果点击的是“取消”按钮,则方法的返回值为1,一般以JFileChooser类的静态属性APPROVE_OPTION表示这个返回值。

JFileChooser可以通过为setFileSelectionMode()方法传递不同的参数来文件选择器指定只能打开文件还是只能打开文件夹或是二者都能打开,setFileSelectionMode()方法的参数一般以JFileChooser类的静态属性表示,如表20-18所示。

表20-18 选择模式

静态属性

意义

FILES_ONLY

只能打开文件

DIRECTORIES_ONLY

只能打开文件夹

FILES_AND_DIRECTORIES

文件和文件夹都能打开

文件选择器还可以设置是否可以同时选中多个文件或文件夹,默认情况下在文件选择器对话框中只能选中一个文件或文件夹,如果调用了JFileChooser类对象的setMultiSelectionEnabled()方法并为其传递true为参数,则可以设置文件选择器可以同时选中多个文件或文件夹。

当用户选择了一个文件和文件夹后,通过调用JFileChooser类定义的getSelectedFile()方法就能获得被选中的文件或文件夹。而如果用户同时选择了多个文件或文件夹,则可以调用getSelectedFiles()方法来获得这些文件或文件夹,getSelectedFiles()方法的返回值是File数组。下面的【例20_27】展示了如何弹出一个文件选择器,并把用户所选择的文件名称显示到文本框中。

【例20_27 JFileChooser的使用】

Exam20_27.java

import java.awt.*;
import java.awt.event.*;
import java.io.File;
import javax.swing.*;
class Exam20_27Frame extends JFrame{
JButton btnOpen,btnSave,btnSelect;
JTextField txtOpen,txtSave,txtSelect;
public Exam20_27Frame(){
init();
}
private void init( ){
Container container = this.getContentPane();//获得窗体的主体区域
container.setLayout(null);
btnOpen = new JButton("打开");
btnSave = new JButton("保存");
btnSelect = new JButton("选择");
txtOpen = new JTextField();
txtSave = new JTextField();
txtSelect = new JTextField();
txtOpen.setSize(350, 30);
txtOpen.setLocation(30, 30);
txtOpen.setFont(new Font("微软雅黑", Font.PLAIN, 18));
btnOpen.setSize(80, 30);
btnOpen.setLocation(400, 30);
btnOpen.setFont(new Font("微软雅黑", Font.PLAIN, 18));
btnOpen.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JFileChooser fileChooser = new JFileChooser("D:/");
fileChooser.setMultiSelectionEnabled(true);
fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
int option = fileChooser.showOpenDialog(Exam20_27Frame.this);
if(option==JFileChooser.APPROVE_OPTION){
File[] files = fileChooser.getSelectedFiles();
String fileNames = "";
for(int i=0;i<files.length;i++){
fileNames = fileNames+files[i].getAbsolutePath()+";";
}
txtOpen.setText(fileNames);
}else{
txtOpen.setText("");
}
}
});

txtSave.setSize(350, 30);
txtSave.setLocation(30, 90);
txtSave.setFont(new Font("微软雅黑", Font.PLAIN, 18));
btnSave.setSize(80, 30);
btnSave.setLocation(400, 90);
btnSave.setFont(new Font("微软雅黑", Font.PLAIN, 18));
btnSave.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JFileChooser fileChooser = new JFileChooser();
int option = fileChooser.showSaveDialog(Exam20_27Frame.this);
if(option==JFileChooser.APPROVE_OPTION){
File file = fileChooser.getSelectedFile();
String fileName = file.getAbsolutePath();
txtSave.setText(fileName);
}else{
txtSave.setText("");
}
}
});
txtSelect.setSize(350, 30);
txtSelect.setLocation(30, 150);
txtSelect.setFont(new Font("微软雅黑", Font.PLAIN, 18));
btnSelect.setSize(80, 30);
btnSelect.setLocation(400, 150);
btnSelect.setFont(new Font("微软雅黑", Font.PLAIN, 18));
btnSelect.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JFileChooser fileChooser = new JFileChooser();
int option = fileChooser.showDialog(Exam20_27Frame.this, "选择");
if(option==JFileChooser.APPROVE_OPTION){
File file = fileChooser.getSelectedFile();
String fileName = file.getAbsolutePath();
txtSelect.setText(fileName);
}else{
txtSelect.setText("");
}
}
});
container.add(btnOpen);
container.add(btnSave);
container.add(btnSelect);
container.add(txtOpen);
container.add(txtSave);
container.add(txtSelect);
}
}
public class Exam20_27 {
public static void main(String[] args) {
Exam20_27Frame frame = new Exam20_27Frame();
frame.setSize(550, 250);
frame.setLocationRelativeTo(null);
frame.setTitle("Exam20_26Frame");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}

【例20_27】的运行结果如图20-28所示。

第二十章《Java Swing》第8节:选择器_JFileChooser

图20-28【例20_27】运行结果

在图20-28所示的窗体上单击任意一个按钮都能弹出一个文件选择对话框,当选中一个文件后,文件的路径就会出现在对应的文本框中。

20.8.2颜色选择器JColorChooser

Swing体系用JColorChooser类表示颜色选择器。JColorChooser如同JoptionPane,只需要通过静态方法就能打开一个颜色选择器对话框。打开颜色选择器对话框的方法是showDialog(),它有两个重载版本,如表20-19所示。

表20-19 showDialog()方法

方法

功能

showDialog(Component component,

String title, Color initialColor)

从component上打开颜色选择对话框,对话框标题是title,默认颜色是initialColor

Color showDialog(Component component, String title, Color initialColor, boolean colorTransparencySelectionEnabled)

从component上打开颜色选择对话框,对话框标题是title,默认颜色是initialColor,参数colorTransparencySelectionEnabled指定是否可以选择颜色的透明度

showDialog()方法的返回值类型是Color,它代表用户在颜色选择器上选择的颜色,如果用户点击的是颜色选择器的取消按钮,则showDialog方法()返回null。下面的【例20_28】展示了如何打开颜色选择器,以及如何获得用户所选择的颜色。

【例20_28 JColorChooser的使用】

Exam20_28.java

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class Exam20_28Frame extends JFrame{
JButton button;
public Exam20_28Frame(){
init();
}
private void init( ){
Container container = this.getContentPane();
container.setLayout(null);
button = new JButton("颜色选择器");
button.setSize(200, 40);
button.setLocation(50,20);
button.setFont(new Font("微软雅黑", Font.PLAIN, 20));
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//打开颜色选择器
Color color = JColorChooser.showDialog(Exam20_28Frame.this,"颜色选择",Color.BLACK);
System.out.println("所选择的颜色是:"+color);
}
});
container.add(button);
}
}
public class Exam20_28{
public static void main(String[] args) {
Exam20_28Frame frame = new Exam20_28Frame();
frame.setSize(320, 150);
frame.setLocationRelativeTo(null);
frame.setTitle("Exam20_28Frame");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}

【例20_28】的运行结果如图20-29所示。

第二十章《Java Swing》第8节:选择器_Java_02

图20-29【例20_28】运行结果

从图20-29所示的窗体上单击“颜色选择器”按钮就能弹出颜色选择器对话框,在对话框上选择一个颜色并单击“确定”按钮就能把选择的颜色输出到控制台上。

除阅读文章外,各位小伙伴还可以点击这里观看我在本站的视频课程学习Java!​

标签:文件,20,Exam20,Java,Swing,new,选择器,JFileChooser
From: https://blog.51cto.com/u_2266836/5949437

相关文章

  • 第二十章《Java Swing》第4节:事件处理与监听器
    当程序员向窗体上添加了按钮等组件之后就能够操作这些组件,但在20.3小节的各个案例中,虽然在窗体上添加了一些按钮,但点击这些按钮并没有任何反应,因此这些按钮也就成了毫无意义......
  • 第二十章《Java Swing》第3节:布局管理器
    当把组件添加到窗体上时,并不是直接把组件添加到JFrame对象上的,而是需要先获得窗体的内容面板,然后把组件添加到内容面板上。获得内容面板的方式是调用窗体的getContentPane()......
  • 第二十章《Java Swing》第2节:窗体的创建
    JavaSwing的各种组件都是由类来定义的,这些类大部分都位于javax.swing包下,也有小部分位于java.awt包下,因此在使用这些类的时候需要在程序中引入这个包下的类。在JavaSwing......
  • 第二十章《Java Swing》第1节:Swing简介
    Java语言最早开发图形界面的应用程序被称为“AWT”,AWT是“AbstractWindowToolkit”的简称,“AbstractWindowToolkit”意为“抽象窗体工具包”。AWT组件并不是纯Java实现......
  • Java千问:Java位运算经典应用(四)
    接上篇七、判断某数是不是2的N次幂我们知道,10的0次幂是1,1次幂是10,2次幂是100...仔细观察一下这些数,你就会发现一个规律,那就是:这些数字当中,开头是1,后面N位上的数字全部是0......
  • 一个Java增强型for循环的易犯错误,你注意到了吗?
    我们知道,在Java语言中有三种循环,分别是while循环,do…while循环和for循环。其实,从JDK1.5开始,又引入了一种增强型for循环,这种新型的for循环主要是用来遍历数组或集合的,它的格......
  • Java千问:Java语言各种数字的“非常规”写法你都会吗?
    Java程序中总是会出现一些数字。我们通常都是用常规的方式来表示这些数字,如以下代码所示inta=1;doubleb=1.5;但是数字也可以有非常规写法,在这里我们用一篇短文简单总......
  • Java数组(05)多维数组
          ......
  • java项目启动动画
    http://patorjk.com/software/taag/#p=testall&f=Graffiti&t=study......
  • 【Java】单号创建服务
     需求:ERP项目存在若干个业务功能,每个业务的单子的单号创建规则需要被统一规划1、每个业务有自己对应的标识2、业务单号必须以英文字母为前缀,长度在2-4个字符3、单号......