弹出框和多个窗口之间的切换

发表时间:2017-05-09 13:48:21 浏览量( 40 ) 留言数( 0 )

学习目标:

1、了解Java的历史

2、为什么要学习Java语言

3、端正学习态度


学习过程:

一、弹出框

1、简介

Java 中的对话框是一个容器,它充当父容器的子容器  Swing中的弹出式对话框是用JOptionPane实现的, 通过showXXXDialog()来显示.其方式都是静态的。JOptionPane 可用于显示各种图标,如用于警告消息、问题、错误和信息等的图标。JOptionPane 这个类支持的功能有:

  • 布局标准对话框;

  • 指定对话框的标题和文本。

  • 提供图标和自定义按钮文本。

2、类型

弹出框的样式一共有四种:

ConfirmDialog:确认对话框(有类似Yes,No等按钮的那种).你也可以传不同的参数进去来改变显示的按钮和icon

MessageDialog:显示消息    

InputDialog:文本输入对话框

OptionDialog:自定义对话框(组合以上三种对话框的类型)

3、方法参数如下:

ParentComponent:对话框的父窗口对象。如果为null则采用缺省的Frame作为父窗口,此时对话框将设置在屏幕的正中。

message:显示的消息文字.其实可以是任何的对象.(我今天无意中把窗体上的JMenuBar对像传进去它显示的就是JMenuBar)

title:标题文字

Component:中显示的组件(如按钮)

Icon:显示的图标(如感叹号)

messageType:一般可以为如下的值ERROR_MESSAGE、INFORMATION_MESSAGE、WARNING_MESSAGE、QUESTION_MESSAGE、PLAIN_MESSAGE

optionType:它决定在对话框的底部所要显示的按钮选项。一般可以为DEFAULT_OPTION、YES_NO_OPTION、YES_NO_CANCEL_OPTION、OK_CANCEL_OPTION

二、使用实例

先新建一个主界面,放置四个按钮,我们分别弹出四个不同的弹出框。主界面如下:

attcontent/2d2836f7-18e8-4025-b764-d529d664db81.png

1、显示消息对话框MessageDialog。把tp01.png图片复制到与类同一个包里面就行了。绑定按钮事件,输入一下代码。

// 消息对话框
Icon icon = new ImageIcon(this.getClass().getResource("tq01.png"));
JOptionPane.showMessageDialog(this, "出错了", "标题",
				JOptionPane.ERROR_MESSAGE, icon);

点击按钮消息框效果如下:

attcontent/730c8f6f-2957-42ec-b25a-9ebeff4a25fb.png

2、显示确认对话框ConfirmDialog。同样绑定事件,代码如下:

 // 通过返回值知道用户点击了是还是否
int result = JOptionPane.showConfirmDialog(this, "是否要退出系统", "标题",
				JOptionPane.OK_CANCEL_OPTION);

if (result == JOptionPane.OK_OPTION) {
     // System.out.println("确认退出");
     this.dispose();// 释放资源
} else {
     System.out.println("取消");
}

显示如下:

attcontent/5124d763-53bd-468b-9add-7452152edde4.png

3、显示InputDialog。可以让用户进行输入,并会的用户输入的内容。代码如下:

String input = JOptionPane.showInputDialog(this, "提示信息", "初始化值");

if (input != null) {
	// 用户点击确定
	System.out.println("用户输入的值:" + input);

}

显示如下:

attcontent/ab3832d8-950e-4d4e-9e5c-8923a7a73e75.png

4、显示OptionDialog。该种对话框可以由用户自己来设置各个按钮的个数并返回用户点击各个按钮的序号(从0开始计数)

Object[] options = { "XX", "取消", "帮助", "退出" };

int result = JOptionPane.showOptionDialog(this, "提示信息", "标题",
				JOptionPane.YES_NO_OPTION, JOptionPane.ERROR_MESSAGE, null,
				options, 3);

switch (result) {
     case 0:
		System.out.println("点击了第1个按钮");
		break;
     case 1:
		System.out.println("点击了第2个按钮");
		break;
     case 2:
		System.out.println("点击了第3个按钮");
		break;

     default:
		System.out.println("点击了第4个按钮");
		break;
}

显示如下:

attcontent/f695d094-6d4f-4e3a-8d76-0269ec7d2f8d.png

二、多个窗口之间的切换和参数传递

1、窗口切换和参数传递

窗口切换比较简单,只需要把当前构造一个新窗口,然后调用setVisible(true)方法就可以了。如果本窗口已经不需要了,那么可以调用this.dispose()方法,释放自己。

窗口直接进行传参也很简单,因为窗口就是一个类文件,我们可以通过构造方法在窗口直接传参,也可以在窗口类中定义一个全局变量,使用get/set方法进行参数的传递。

  //2、打开新窗口  
//通过构造方法传递用户名称
MainFrame mainFrame=new MainFrame(name);
this.dispose();//释放自己
mainFrame.setVisible(true);//显示新框框

2、居中显示

估计大家也发现了。我们现在弹出的所有窗口都是在左上角显示,我们可以使用setLocation方法指定窗口在屏幕的那个位置显示。setLocation方法之需要传入屏幕的坐标(x和y)就可以了。修改上面的代码。

   MainFrame mainFrame=new MainFrame(name);
this.dispose();//释放自己
mainFrame.setLocation(100, 100);
mainFrame.setVisible(true);//显示新框框

这样新窗口就不是在左上角显示了。但是我们的要求是想要窗口居中显示,所以这里需要做一点简单的算法,计算窗口在中间显示的坐标位置是多少?我们搜先要知道在计算机屏幕的坐标和我们初中时候学习的平面坐标差不多,唯一的区别是Y轴是向下的。参考下图:

attcontent/b1746806-e1e4-4d43-bcea-9b69f8b0ab4f.png

如果每一个窗口都要这样计算,还是比较麻烦的,我们可以封装一个居中显示窗口类,实现代码如下:

 public class FrameUtil {
	public static void centerShowJFrame(Component component) {
		// 获得屏幕的大小
		Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
		// 获得窗口的大小
		Dimension frameSize = component.getSize();

		// 如果窗口的大小比屏幕的要大,就用屏幕的赋值给窗口的。
		if (frameSize.height > screenSize.height) {
			frameSize.height = screenSize.height;
		}
		if (frameSize.width > screenSize.width) {
			frameSize.width = screenSize.width;
		}

		// 设置窗口的显示位置居中。
		component.setLocation((screenSize.width - frameSize.width) / 2,
				(screenSize.height - frameSize.height) / 2);

		// 显示窗口
		component.setVisible(true);
	}
}

修改上面的代码如下:

// 2、打开新窗口 //通过构造方法传递用户名称
MainFrame mainFrame = new MainFrame(name);
this.dispose();// 释放自己

FrameUtil.centerShowJFrame(mainFrame);//居中显示
/*
	 mainFrame.setLocation(100, 100);
	mainFrame.setVisible(true);//显示新框框
*/

现在弹出的窗口就都是居中的了。