0
点赞
收藏
分享

微信扫一扫

第二十章《Java Swing》第7节:对话框

​对话框是桌面应用程序中一种很重要的组件,例如在删除一个文件的时候,系统就会用对话框的形式提醒用户是否确定要删除这个文件。Swing体系中有两类对话框:第一类是系统对话框,第二类是自定义对话框。系统对话框就是Swing体系已经定义好的对话框,它们的基本界面是Java基础类库已经设计好的,程序员只需要调用一个方法就能把这个对话框显示出来。而自定义对话框是指由程序员自己设计的对话框,这种对话框的界面完全由程序员根据实际业务的需要自行设计。任何对话框都是从某个窗体上弹出来的,没有凭空出现的对话框。

系统对话框又可以分为三种,分别消息对话框、确认对话框和输入对话框。对话框不能做最大化、最小化以及调节大小的操作。系统对话框的基本结构是固定的,它们都有标题、图标、消息和按钮四个部分。本小节将详细讲解三种系统对话框和自定义对话框的使用。​

20.7.1消息对话框

消息对话框用于向用户传达一件已经发生了的事情,用户在看到这个对话框之后所能做的操作就只有点击一下“确定”按钮,表示自己已经知道了这个消息。所有弹出系统对话框,都要调用JoptionPane类的showMessageDialog()静态方法。showMessageDialog()方法有3个重载版本,如表20-12所示。​

表20-12 showMessageDialog()方法​

方法​

功能​

void showMessageDialog(Component parentComponent,Object message)​


在parentComponent窗体上弹出消息对话框,消息为message​

void showMessageDialog(Component parentComponent,Object message, String title, int messageType)​

在parentComponent窗体上弹出消息对话框,消息为message,对话框标题为title,消息类型为messageType​

void showMessageDialog(Component parentComponent,Object message, String title, int messageType, Icon icon)​

在parentComponent窗体上弹出消息对话框,消息为message,对话框标题为title,消息类型为messageType​

从表20-12可以看出:消息对话框的类型messageType是int型参数,这个参数一般都用JOptionPane类的静态属性表示,下面的表20-13展示了各种静态属性所代表的消息类型。​

表20-13 消息类型​

静态属性

代表的消息类型

ERROR_MESSAGE

错误

INFORMATION_MESSAGE

提示信息

WARNING_MESSAGE

警告

QUESTION_MESSAGE

提问

PLAIN_MESSAGE

普通消息

下面的【例20_22】展示了如何弹出三种消息对话框。​

【例20_22 消息对话框】

Exam20_22.java​

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class Exam20_22Frame extends JFrame{
JButton[] buttons;
public Exam20_22Frame(){
init();
}
private void init( ){
Container container = this.getContentPane();
container.setLayout(null);
buttons = new JButton[3];
buttons[0] = new JButton("对话框1");
buttons[1] = new JButton("对话框2");
buttons[2] = new JButton("对话框3");
for(int i=0;i<buttons.length;i++){
buttons[i].setSize(200, 40);
buttons[i].setLocation(50, i*60+20);
buttons[i].setFont(new Font("微软雅黑", Font.PLAIN, 20));
container.add(buttons[i]);
}
buttons[0].addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//弹出消息对话框,仅设置消息
JOptionPane.showMessageDialog(Exam20_22Frame.this,
"您的会员资格将于3天后到期");
}
});

buttons[1].addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//弹出消息对话框,设置消息、标题、消息类型
JOptionPane.showMessageDialog(Exam20_22Frame.this,
"您的会员资格将于3天后到期","会员到期提醒",JOptionPane.WARNING_MESSAGE);
}
});
buttons[2].addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//弹出消息对话框,设置消息、标题、消息类型、图标
JOptionPane.showMessageDialog(Exam20_22Frame.this,
"您的会员资格将于3天后到期","会员到期提醒",JOptionPane.WARNING_MESSAGE,
new ImageIcon("a.png"));
}
});
}
}
public class Exam20_22 {
public static void main(String[] args) {
Exam20_22Frame frame = new Exam20_22Frame();
frame.setSize(320, 250);
frame.setLocationRelativeTo(null);
frame.setTitle("Exam20_22Frame");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}

【例20_22】的运行结果如图20-23所示。​

第二十章《Java Swing》第7节:对话框_消息对话框

图20-23【例20_22】运行结果​

在图20-23所示的窗体上,单击任意一个按钮都会一个消息对话框,图20-23所示的弹出第二种形式,即指定了消息对话框的消息、标题以及消息类型。【例20_22】的第三个按钮所弹出的消息对话框要设置一个图标,这个图标是a.png,为了正确显示出这个图标,需要读者在工程根目录下添加a.png。​

20.7.2确认对话框

确认对话框的作用主要是用来向用户确认要不要做某个操作,或者用户到底想做什么样的操作。例如在删除文件的时候,系统就会用一个确认对话框向用户确认是不是真的要删除这个文件。弹出确认对话框是由JOptionPane类的showConfirmDialog()静态方法完成的,这个方法有4个重载的版本,如表20-14所示。​

表20-14 showConfirmDialog()方法​

方法

功能

int showConfirmDialog(Component parentComponent,Object message)

在parentComponent窗体上弹出确认对话框,对话框文本message

int showConfirmDialog(Component parentComponent, Object message, String title, int optionType)

parentComponent窗体上弹出确认对话框,对话框文本是message对话框标题为title,按钮组合类型为optionType

int showConfirmDialog(Component parentComponent, Object message, String title, int optionType, int messageType)

parentComponent窗体上弹出确认对话框,对话框文本是message对话框标题为title,按钮组合类型为optionType消息类型为messageType

int showConfirmDialog(Component parentComponent, Object message, String title, int optionType,int messageType, Icon icon)

parentComponent窗体上弹出确认对话框,对话框文本是message对话框标题为title,按钮组合类型为optionType消息类型为messageType图标为icon

从表20-14可以看出:大部分情况下确认对话框需要设置按钮组合,所谓“按钮组合”就是指确认对话框上显示的按钮有哪些,这些按钮组合也都是有JOptionPane类的静态属性表示的,如表20-15所示。​

表20-15 确认对话框按钮组合​

静态属性

按钮组合

YES_NO_OPTION

是与否的按钮组合

YES_NO_CANCEL_OPTION

、否与取消的按钮组合

OK_CANCEL_OPTION

OK与取消的按钮组合

DEFAULT_OPTION

默认按钮组合

从表20-14还可以看出:showConfirmDialog()方法的返回值类型为int,这个返回值代表了用户点击了哪一个按钮。这些返回值也可以由JOptionPane类的静态属性表示,这些静态属性如表20-16所示。​

表20-16确认对话框的返回值​

静态属性

返回值意义

YES_OPTION

用户点击了“是”按钮

NO_OPTION

用户点击了“否”按钮

CANCEL_OPTION

用户点击了“取消”按钮

OK_OPTION

用户点击了“OK”按钮,与YES_OPTION相同

CLOSED_OPTION

用户关闭了确认对话框

下面的【例20_23】展示了如何弹出确认对话框,由于弹出确认对话框和弹出消息对话框有很多相同的参数,本例只演示弹出其中一种确认对话框。​

【例20_23 确认对话框】

Exam20_23.java​

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class Exam20_23Frame extends JFrame{
JButton button;
public Exam20_23Frame(){
init();
}
private void init( ){
Container container = this.getContentPane();
container.setLayout(null);
button = new JButton("确认对话框1");
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) {
//弹出确认对话框,设置对话框文本、标题、按钮组合
JOptionPane.showConfirmDialog(Exam20_23Frame.this,
"在关闭前是否保存文档?","关闭文档提示",JOptionPane.YES_NO_CANCEL_OPTION);
}
});
container.add(button);
}
}
public class Exam20_23 {
public static void main(String[] args) {
Exam20_23Frame frame = new Exam20_23Frame();
frame.setSize(320, 150);
frame.setLocationRelativeTo(null);
frame.setTitle("Exam20_23Frame");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}

【例20_23】的运行结果如图20-24所示。​

第二十章《Java Swing》第7节:对话框_输入对话框_02

图20-24【例20_23】运行结果​

在图20-24所示的窗体上单击“确认对话框1”就会弹出确认对话框。​

20.7.3输入对话框

输入对话框的作用是让用户输入一些信息,其中最常见的形式就是在对话框上出现一个文本框,由用户在文本框当中输入信息。输入对话框由JOptionPane类的showInputDialog()实现,这个方法有6个的重载的版本,如表20-17所示。​

表20-17 showInputDialog()方法​

方法

功能

String showInputDialog(Object message)

弹出输入对话框,对话框文本是message

String showInputDialog(Object message, Object initialSelectionValue)

弹出输入对话框,对话框文本是message默认的输入信息为initialSelectionValue

String showInputDialog(Component parentComponent,Object message)

parentComponent弹出输入对话框,对话框文本是message

String showInputDialog(Component parentComponent, Object message, Object initialSelectionValue)

parentComponent弹出输入对话框,对话框文本是message默认的输入信息为initialSelectionValue

String showInputDialog(Component parentComponent, Object message, String title, int messageType)

parentComponent弹出输入对话框,对话框文本是message默认的输入信息为initialSelectionValue对话框标题是title消息类型是messageType

Object showInputDialog(Component parentComponent, Object message, String title, int messageType, Icon icon, Object[] selectionValues, Object initialSelectionValue)

parentComponent弹出输入对话框,对话框上有一个下拉框。对话框文本是message对话框标题是title消息类型是messageType对话框图标是icon,输入选项selectionValues默认输入信息为initialSelectionValue

从表20-17可以看出:showInputDialog()方法的返回值类型为String,这个返回值就是用户所输入(或选择)的信息。下面的【例20_24】展示了如何弹出一个输入对话框。​

【例20_24 输入对话框】

Exam20_24.java​

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class Exam20_24Frame extends JFrame{
JButton button;
public Exam20_24Frame(){
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) {
//弹出输入对话框
Object input = JOptionPane.showInputDialog(Exam20_24Frame.this,
"请问你想要什么礼物?","选择礼物", JOptionPane.QUESTION_MESSAGE, null,
new String[]{"iPhone","iPad","ice cream"}, "iPad");
}
});
container.add(button);
}
}
public class Exam20_24 {
public static void main(String[] args) {
Exam20_24Frame frame = new Exam20_24Frame();
frame.setSize(320, 150);
frame.setLocationRelativeTo(null);
frame.setTitle("Exam20_24Frame");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}

【例20_24】的运行结果如图20-25所示。​

第二十章《Java Swing》第7节:对话框_确认对话框_03

图20-25【例20_24】运行结果​

在图20-25所示的界面中,单击“输入对话框”按钮就能弹出如图所示的输入对话框,这个输入对话框上有一个下拉框。如果使用前5个版本的showInputDialog()方法,则可以弹出一个带有文本框的输入对话框,读者可以自行尝试实现。​


20.7.4内部信息对话框

内部信息对话框是从指某个容器上弹出的对话框,这个对话框不能离开弹出它的容器。实际上,通过getContentPane()方法获得的内容面板实际上就是一个容器,从这个容器上弹出的对话框不能在容器以外的范围内显示。内部对话框也分为3种,与普通的系统对话框一一对应。为与弹出普通对话框的方法相区别,弹出内部信息对话框的方法名称中会增加一个单词“Internal”,例如内部信息确认对话框的方法是showInternalConfirmDialog()。​

弹出内部信息对话框时,会把“父组件”指定为一个容器而不是窗体对象本身。下面的【例20_25】展示了如何弹出一个内部信息对话框。​

【例20_25 内部信息对话框】

Exam20_25.java​

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class Exam20_25Frame extends JFrame{
JButton button;
public Exam20_25Frame(){
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) {
//弹出内部信息对话框
JOptionPane.showInternalMessageDialog(container, "内部信息对话框");
}
});
container.add(button);
}
}
public class Exam20_25{
public static void main(String[] args) {
Exam20_25Frame frame = new Exam20_25Frame();
frame.setSize(320, 150);
frame.setLocationRelativeTo(null);
frame.setTitle("Exam20_25Frame");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}

【例20_25】的运行结果如图20-26所示。​

第二十章《Java Swing》第7节:对话框_Java_04

图20-26【例20_25】运行结果​

在窗体上单击“内部信息对话框按钮”就可以弹出一个内部信息对话框,从图20-26可以很明显的看出:内部信息对话框无法超出弹出它的容器。​

本文字版教程还配有更详细的视频讲解,小伙伴们可以​​点击这里​​观看。

举报

相关推荐

0 条评论