前言:你可以自己写一个类继承JFrame,将这个窗口作为一个对话框,在需要打开时实例化出来, 但这样很麻烦,因为java swing已经提供了一套对话框的方案 且由于是java内置,我们只需要调用即可,不用设置其显示布局和大小

对话框在java中分为两种类型(十分重要)

  • 1:有模式对话框:当这个对话框处于激活状态时,不能激活其他对话框,且将会 阻塞其他线程。直到这个对话框关闭之后才能进行其他操作
  • 2:无模式对话框:与有模式相反,当这个对话框处于激活状态时,仍能够激活其 他对话框,且不会阻塞其他线程

对话框的使用

所有类型的对话框都继承至JDialog,调用对话框,使其弹出显示,并不需要创建对话框对象 【非自定义的对话框前提下】。而是统一使用 JOptionPane这个类,调用其中的静态方法来实现。以下讲解常用的几种对话框

(一)消息对话框(有模式对话框)

即弹出一个对话框,里面有提示消息和确认按钮。

其的调用方式为

JOptionPane.showMessageDialog(Component parentComponent,Object message,String title,int messageType);

其中的参数含义:

  1. parentComponent:指定对话框可见的位置,为null时,将会在屏幕正中间显示,不为空 时,将会在这个组件的正中间显示,不为空时一般写this,即本窗口
  2. message:显示的信息,这里传入是个Object类型的对象,Object是所有类的父类,这里可以 直接填入个字符串进行显示,如果传入的是对象,那么将会自动的调用其toString()函数
  3. title:对话框的标题
  4. 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();
 }
 }

java swing显示 java swing dialog_java

(六)文件选择对话框

只需要创建JFileChooser对象,该对象调用showXXXDialog()方法即可显示文件对话 框:

java swing显示 java swing dialog_java swing_02

共有3种对话框可选择

  1. showDialog(parent,buttonName);显示自定义的文件对话框,点击后的事件 由自己定义(一般用不上)
  2. showSaveDialog(parent);显示保存对话框,需要选择到一个文件身上,作为程序 的输出文件
  3. 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();