前言:你可以自己写一个类继承JFrame,将这个窗口作为一个对话框,在需要打开时实例化出来, 但这样很麻烦,因为java swing已经提供了一套对话框的方案 且由于是java内置,我们只需要调用即可,不用设置其显示布局和大小
对话框在java中分为两种类型(十分重要)
- 1:有模式对话框:当这个对话框处于激活状态时,不能激活其他对话框,且将会 阻塞其他线程。直到这个对话框关闭之后才能进行其他操作
- 2:无模式对话框:与有模式相反,当这个对话框处于激活状态时,仍能够激活其 他对话框,且不会阻塞其他线程
对话框的使用
所有类型的对话框都继承至JDialog,调用对话框,使其弹出显示,并不需要创建对话框对象 【非自定义的对话框前提下】。而是统一使用 JOptionPane这个类,调用其中的静态方法来实现。以下讲解常用的几种对话框
(一)消息对话框(有模式对话框)
即弹出一个对话框,里面有提示消息和确认按钮。
其的调用方式为
JOptionPane.showMessageDialog(Component parentComponent,Object message,String title,int messageType);
其中的参数含义:
- parentComponent:指定对话框可见的位置,为null时,将会在屏幕正中间显示,不为空 时,将会在这个组件的正中间显示,不为空时一般写this,即本窗口
- message:显示的信息,这里传入是个Object类型的对象,Object是所有类的父类,这里可以 直接填入个字符串进行显示,如果传入的是对象,那么将会自动的调用其toString()函数
- title:对话框的标题
- messageType:对话框类型,填入的是JOptionPane中的静态常量
- INFOMATION_MESSAGE
- WARNING_MESSAGE
- ERROR_MESSAGE
- QUESTION_MESSAGE
- PLAIN_MESSAGE
这些值主要更改的是对话框的外观,比如Quesstion就会显示一个问号在左边, WARANING则是一个黄色的感叹号
由于使用简单,这里就不做演示了
(二)输入对话框(有模式对话框)
即弹出一个对话框,里面有提示信息,输入框,取消按钮以及确定按钮。
其的调用方式为
String input= JOptionPane.ShowInputDialog(Component paramentComponent,Object message,String title,int messageType)
其中这些参数的含义和上面一样
需要注意的是,这个函数有返回值String,其返回的内容就是输入对话框中输入的内容
由于使用简单,这里就不做演示了
(三)确认对话框(有模式对话框)
即弹出一个对话框,里面有提示消息和是按钮和否按钮
其的调用方式为
int n=JOptionPane.showConfrimDialog(Component parentComponent,Object messgage,String title,int optionType)
其中参数的含义和上面基本相同
除了optionType optionType:同样是JOptionPane中的静态常量,其有以下取值
- YES_NO_OPTION:是否选项
- YES_NO_CANCEL_OPTION:是否和取消选项
- OK_CANCEL_OPTION:好与取消选项
这些值可以改变确认对话框的外观。 需要注意的是,这个函数有返回值int,其返回一个int类型的整形数,其具体代表的含义,需 要用JOptionPane中的静态常量比较才可知道
返回的数字有以下情况
- JOptionPane.YES_OPTION:即点击了是按钮
- JOptionPane.NO_OPTION:即点击了否按钮
- JOptionPane.CANCEL_OPTION:即点击了取消按钮 J
- OptionPane.CLOSED_OPTION:即点击了关闭按钮
- JOptionPane.OK_OPTION:即点击了好按钮
实际运用的情况就是
int n=JOptionPane.showConfrimDialog(Component parentComponent,Object messgage,String title,int optionType)
2 if(n==JOption.OK_OPTION)
3 {
4 //。。。。
5 }else if(n==JOption.NO_OPTION)
6 {
7 //.....
8 }
由于使用简单,这里就不做演示了
(四)颜色对话框(有模式对话框)
没有什么实际作用,弹出的窗口可以让你选择颜色。他是JColorChooser类中的静态方法, 而不是JOptionPane
其的调用方式为
Color selectColor=JColorChooser.showDialog(Component parentComponent,String tititle,Color initColor)
其中参数很少
主要需要讲的就是initColor,其代表初始颜色
需要注意的是,其有返回类型,类型是Color,即选中的颜色
由于用处不大,这里就不做演示了
(五)自定义对话框(模式可设置)
java swing允许自定义对话框,创建一个类继承至JDialog即可,该类的对象就是一个对话 框,对话框本身就是一个容器,对话框上可以添加组件。
需要注意的是,正是由于对话框本身就是一个容器,所以其不允许被添加到另一个容器中。 只允许单独调用,单独出现
显示出自定义的对话框需要依托于其父类,即JDialog的构造函数
JDialog();//构造对话框后将不可见,因为其依赖的窗口不可见
JDialog(JFrame owner);//构建时指定其拥有者,这样可以使该对话框可见
JDialog(JFrame owner,String title);//构建时指定其拥有者,这样可使该对话框可见,并设置其标题
以下是一个例子展示自定义的对话框
效果:点击按钮后,将会打开自定义的对话框,且对话框的标题就是输入的文字
/**
* 自定义的对话框
*/
public class MyDialog extends JDialog {
private JTextField textField;
private JButton button;
/**
* 自定义构造函数必须有JFrame参数,否则窗口没有依托将不会显示
* @param frame
* @param s
*/
public MyDialog(JFrame frame,String s)
{
//GUI部分
super(frame,s);//显式调用父类构造函数
textField=new JTextField(10);
button=new JButton("按钮");
add(textField);
add(button);
setModal(true);//设置为有模式对话框
setBounds(60,60,100,100);
//setVisible(true);对话框事先不设置可视性,不可视。
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
}
}
public class SimpleListener implements ActionListener {
public void setMyDialog(MyDialog myDialog) {
this.myDialog = myDialog;
}
private MyDialog myDialog;
public void actionPerformed(ActionEvent event)
{
//开启这个自定义对话框
myDialog.setVisible(true);
}
}
public class SimpleWindow extends JFrame {
private JButton button;
private SimpleListener listener;
private MyDialog myDialog;
public SimpleWindow()
{
//GUI部分
setLayout(new FlowLayout());
button=new JButton("打开自定义窗口");
add(button);
setVisible(true);
setBounds(100,100,200,300);
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
myDialog=new MyDialog(this,"这是一个自定义对话框");//实例化这个自定义对话
框,虽然还未显示
//设置监听器
listener=new SimpleListener();
listener.setMyDialog(myDialog);
//添加监听器
button.addActionListener(listener);
}
}
public class Main {
public static void main(String[] args)
{
SimpleWindow window=new SimpleWindow();
}
}
(六)文件选择对话框
只需要创建JFileChooser对象,该对象调用showXXXDialog()方法即可显示文件对话 框:
共有3种对话框可选择
- showDialog(parent,buttonName);显示自定义的文件对话框,点击后的事件 由自己定义(一般用不上)
- showSaveDialog(parent);显示保存对话框,需要选择到一个文件身上,作为程序 的输出文件
- showOpenDialog(parent);显示打开对话框,需要选择到一个文件夹上,作为程 序的输入文件 parent为显示的父物体,设置为null居中显示。
这3个函数均返回int类型CANCEL_OPTION,APPROVE_OPTION,JFileChooser中定义 了静态常量可以根据返回做不同的逻辑处理
其中showSaveDialog与showOpenDialog事件系统已经定义,点击"打开",“保 存”后,将会自动消失对话框,且从JFileChooser对象调用getSelectedFile()函数可以获 得选择的文件。
更改选择模式:默认的选择模式是仅文件,如果需要选择文件夹,则需要在调用 showXXXDialog之前设置setFileSelectionMode,可以设置的静态常量有
- FILES_ONLY
- DIRECTORIES_ONLY
- FILES_AND_DIRECTORIES
Demo选择输出目录
JFileChooser jFileChooser= new JFileChooser();
jFileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
jFileChooser.showSaveDialog(null);
File dialog=jFileChooser.getSelectedFile();