Java Swing容器:对话框

本文详细介绍了Swing中的JDialog对话框的创建、模式区分以及与JFrame的关系。同时讲解了如何使用JOptionPane创建消息、确认、输入和选项对话框,以简化对话框设计。
摘要由CSDN通过智能技术生成

       对话框(JDialog)是Swing中的一种顶层容器,它与框架类似都是可以移动窗口。与框架不同的是,对话框一般依附于一个框架之上,由该框架来调用。对话框分为有模式对话框和非模式对话框,有模式对话框是指在该对话框被关闭之前,其它窗口无法接收任何形式的输入,直到对话框被关闭;而非模式对话框允许用户在处理对话框的同时与其它窗口进行交流。

       对话框采用JDialog类来实现,其主要构造方法如下:

  • JDialog(Frame owner):创建一个没有标题的非模式对话框。
  • JDialog(Frame owner, boolean modal):创建一个指定模式的没有标题的对话框,话框架的模式由参数modal来指定,true为有模式对话框,false为非模式对话框。
  • JDialog(Frame owner, String title):创建一个有标题的非模式对话框。
  • JDialog(Frame owner, String title, boolean modal):创建一个指定模式的有标题的对话框,话框架的模式由参数modal来指定。

       与JFrame类似,刚创建的对话框是不可见的,需要调用setVisible(true)方法才能将其显示出来。

【例1】下面程序演示了对话框的创建以及JFrame窗口与对话框之间的通信。

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class JDialogDemo extends JDialog{
	JTextField textField=new JTextField(12);
	JTextArea textArea=new JTextArea();
	JButton sendButton=new JButton("发送信息");
	JButton closeButton=new JButton("关闭对话框");
	public JDialogDemo(Frame owner,String title,boolean modal,
JTextArea text) {
		super(owner,title,modal);//调用父类的构造方法
		setSize(300,200);
		setLocationRelativeTo(null);
		JPanel panel1=new JPanel();
		panel1.add(new JLabel("传递给窗口的信息:"));
		panel1.add(textField);
		JPanel panel2=new JPanel();
		panel2.add(sendButton);
		panel2.add(closeButton);
		add(panel1,BorderLayout.NORTH);
		add(textArea,BorderLayout.CENTER);
		add(panel2,BorderLayout.SOUTH);
		//发送信息按钮注册事件监听器
		sendButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				//向传递给对话框的窗口文本区组件添加信息
				text.append(textField.getText()+"\n");
			}
		});
		//关闭对话框按钮注册事件监听器
		closeButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				setVisible(false);//设置对话框为不可视
			}
		});
	}
	public static void main(String[] args) {
		JFrame frame=new JFrame("主窗口");
		frame.setSize(300,200);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setLocationRelativeTo(null);
		JTextField textField=new JTextField(12);
		JTextArea textArea=new JTextArea();
		JButton showButton=new JButton("显示对话框");
		JButton sendButton=new JButton("发送信息");
		JDialogDemo dialog=new JDialogDemo(frame,"对话框",false,textArea);
		//显示对话框按钮注册事件监听器
		showButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				dialog.setVisible(true);//设置对话框为可视
			}
		});
		//发送信息按钮注册事件监听器
		sendButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				//向对话框中文本区组件添加信息
				dialog.textArea.append(textField.getText()+"\n");
			}
		});
		JPanel panel1=new JPanel();
		panel1.add(new JLabel("传递给对话框的信息:"));
		panel1.add(textField);
		JPanel panel2=new JPanel();
		panel2.add(showButton);
		panel2.add(sendButton);
		frame.add(panel1,BorderLayout.NORTH);
		frame.add(textArea,BorderLayout.CENTER);
		frame.add(panel2,BorderLayout.SOUTH);
		frame.setVisible(true);
	}
}

       运行上述程序,执行结果如图1所示。点击主窗口中的显示对话框按钮,弹出右侧所示的对话框。点击主窗口中的发送信息按钮,则会将其文本框中的信息插入到对话框中的文本区内;点击对话框中的发送信息按钮,则会将其文本框中的信息插入到主窗口中的文本区内。

图1.  对话框使用示例

       JDialog类通常用于创建自定义对话框,但有时候对话框只要显示一段文字或进行简单的选择,这时候使用JOptionPane类提供的标准对话框,可以极大地减少代码的编写量。利用JOptionPane创建对话框通常不需要使用new操作符来创建JOptionPane对象,而是使用JOptionPane类中定义的多个形如showXxxDialog的静态方法来创建标准对话框。主要的标准对话框有:消息对话框(showMessageDialog)、输入对话框(showInputDialog)、确认对话框(showConfirmDialog)、选项对话框(showOptionDialog),除了选择对话框外,其它几种标准对话框都定义有若干个不同格式的同名方法。在这里,我们主要介绍每种标准对话框的一般方法格式。

1)消息对话框

       消息对话框的主要作用是显示信息,告知用户发生了什么情况。可以使用JOptionPane类中的静态方法showMessageDialog()来创建消息对话框,其主要格式如下:

        void showMessageDialog(Component parentComponent, Object message,

        String title, int messageType, Icon icon)  

       其中,parentComponent表示对话框的父窗口对象,如果取值为null,则对话框将在屏幕正中显示;message为显示在对话框中的描述信息;title为对话框的标题,messageType为消息类型,其取值如表1所示,这些值可以给出对话框的外观,例如,取值为JOptionPane.QUESTION_MESSAGE时,对话框的外观上有一个明显的“?”符号;icon为对话框上显示的装饰性图标,如果没有指定,则会根据参数messageType显示默认图标。

表1 标准对话框的消息类型

消息类型取值消息类型含义消息类型图标

JOptionPane.INFORMATION_MESSAGE

提示消息

JOptionPane.WARNING_MESSAGE

警告消息

JOptionPane.ERROR_MESSAGE

错误消息

JOptionPane.QUESTION_MESSAGE

提问消息

JOptionPane.PLAIN_MESSAGE

简约消息

无图标

       例如,执行下面代码会显示一个如图2所示的消息对话框。

JOptionPane.showMessageDialog(null, "File not found","消息会话框",

                                                       JOptionPane.ERROR_MESSAGE);

图2. 消息对话框示例

2)确认对话框

       确认对话框的作用是显示问题,要求用户进行确认。可以使用JOptionPane类中的静态方法showConfirmDialog()来创建确认对话框,其主要格式如下:

        int showConfirmDialog(Component parentComponent, Object message,

                           String title, int optionType,int messageType, Icon icon)

       其中,参数parentComponent、message、title、messageType和icon与消息对话框中相应的参数含义是一致的,optionType表示对话框上按钮的类型,可以取如下常量:

        JOptionPane.YES_NO_OPTION

        JOptionPane.YES_NO_CANCEL_OPTION

        JOptionPane.OK_CANCEL_OPTION

       该方法的返回值为用户选择的按钮序号,主要有:JOptionPane.YES_OPTION、JOptionPane.NO_OPTION、JOptionPane.CANCEL_OPTION、JOptionPane.OK_OPTION和JOptionPane.CLOSED_OPTION等,分别代表了用户选择了YES、NO、CANCEL、OK等按钮以及未选择直接关闭对话框。

例如,

int select=JOptionPane.showConfirmDialog(null, "Create one",
						    "确认会话",JOptionPane.YES_NO_CANCEL_OPTION);
if(select==JOptionPane.YES_OPTION) {
	//用户点击是(Y)按钮
}else if(select==JOptionPane.NO_OPTION) {
	//用户点击否(N)按钮
}else if(select==JOptionPane.CANCEL_OPTION) {
	//用户点击取消按钮
}else if(select==JOptionPane.CLOSED_OPTION) {
	//用户直接关闭对话框
}

       执行上面代码会显示一个如图3所示的确认对话框,用户点击“是(Y)”按钮,方法返回值为JOptionPane.YES_OPTION,点击“否(N)”按钮,方法返回值为JOptionPane.NO_OPTION,点击“取消”按钮,方法返回值为JOptionPane.CANCEL_OPTION,如果直接关闭对框架,方法的返回值为JOptionPane.CLOSED_OPTION。

图3. 确认对话框示例

3)输入对话框

       输入对话框含有供用户输入的文本框或可选择选项的组合框,以及一个确认按钮和一个取消按钮。可以使用JOptionPane类中的静态方法showInputDialog()来创建输入对话框,其主要格式如下:

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

       其中,参数parentComponent、message、title、messageType和icon与消息对话框中相应的参数含义是一致的;selectionValues表示所有可能的选项值,如果没有指定,则显示文本框,否则显示组合框;initialSelectionValue表示默认的选项或信息。

       例如,执行代码会显示如图4(a)所示的带文本的输入对话框。

String input=JOptionPane.showInputDialog(null, "请输入信息",

                                                       "带文本框输入对话框",JOptionPane.INFORMATION_MESSAGE);

       执行下面代码显示如图4(b)所示的带组合框的输入对话框。

String[] selectionValues={"计算机科学与技术","软件工程","网络空间安全"};

String selectedValue=(String)JOptionPane.showInputDialog(null, "请选择:",

"输入对话框", JOptionPane.INFORMATION_MESSAGE,null, selectionValues,selectionValues[0]);
​​​​​​​(a) ​​​​​​​(b)

图4. 输入对话框示例

4)选项对话框

       选项对话框显示一组选项按钮,用户可以从中选择一个。可以使用JOptionPane类中的静态方法showOptionDialog()来创建选项对话框,其主要格式如下:

int showOptionDialog(Component parentComponent, Object message, String title, int                                                     optionType, int messageType, Icon icon, Object[] options, Object initialValue)

       其中,参数parentComponent、message、title、optionType 、messageType和icon与确认对话框中相应的参数含义是一致的;options表示可供用户选择的按钮选项,initialValue表示默认的选项。

例如,执行下面代码显示如图5所示的选项对话框。

String[] options= {"选项A","选项B","选项C","选项D"};
int select=JOptionPane.showOptionDialog(panel, "请选择你的选项:", "选项对话框",
					JOptionPane.DEFAULT_OPTION,JOptionPane.QUESTION_MESSAGE, 
null, options, options[0]);
if(select==0) {
	//点击"选项A"按钮
}else if(select==1) {
	//点击"选项B"按钮
}else if(select==2) {
	//点击"选项C"按钮
}else if(select==3){
	//点击"选项D"按钮
}

图5. 选项对话框示例

  • 14
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值