消息对话框:(这个对话框提供一些信息)
无模式:可多线程的执行
有模式:用户必须处理这个一个对话框。必须解决这个问题后才可以继续相处下去
对话框分为无模式和有模式两种。如果一个对话框 是有模式的对话框,那么当这个对话框处于激活状态时,只让程序响应对话框内部的事件,而且将阻塞其他线程的执行,用户不能再激活对话框所在程序中的其他窗口,直到该对话框消失不可见。无模式对话框处于激活状态时,能再激活其他窗口,也不阻塞其他线程的执行。
进行一个重要的操作动作之前,通过弹出一个有模式的对话框表明操作的重要性。
public static void showMessageDialog
(Component parentComponent,String message,String title,int
messageType)
创建一个消息对话框,其中参数parentComponent指定对话框可见时的位置如果parentComponent为null,对话框会在屏幕的正前方显示出来;如果组件parentComponent不空,对话框在组件prenCompoment的正前面居中显示。message指定对话框上显示的消息,title指定对话框的标题,messageType取值是JOptionPane中的类常量:
INFORMATIONMESSAGE
WARNINGMESSAGE
ERROR MESSAGE
OUESTIONMESSAGE
PLAIN MESSAGE
这些值可以给出对话框的外观,例如,取值JOptionPane. WARNING MESSAGE时,对一个明显的“!”符号。
在下面的例子中,要求用户在文本框中只能输入英文字母,当输入非英文字母时弹出对话框。
public class Example9_16 {public static void main(String args[]) {WindowMess win=new WindowMess();win.setTitle("带消息对话框的窗口"); win.setBounds(80,90,350,300);}}
package 例题;import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
public class WindowMess extends JFrame implements ActionListener {/*** */private static final long serialVersionUID = -2662134241642973046L;JTextField inputEnglish;JTextArea show;String regex = "[a-zA-Z]+"; WindowMess() {inputEnglish=new JTextField(10);inputEnglish.addActionListener(this);show=new JTextArea(10,10); //add(inputEnglish,BorderLayout.NORTH);// add(show,BorderLayout.CENTER); this.setLayout(new FlowLayout());add(inputEnglish);show.setLineWrap(true); //设置自动换行 add(new JScrollPane(show));setVisible(true);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}public void actionPerformed(ActionEvent e) { if(e.getSource()==inputEnglish) {String str=inputEnglish.getText();if(str.matches(regex)) {show.append(str+",");}else { //弹出消息对话框。JOptionPane.showMessageDialog(this,"输入了非法字符","消息对话框",JOptionPane.ERROR_MESSAGE);inputEnglish.setText(null); } }}
}
输入对话框:(弹出对话框可以输入数据)
输入对话框有模式
输入对话框含有供用户输入文本的文本框、一个确认和取消按钮,是有模式对话框。当输入对话框可见时,要求用户输入一个字符串。
JOptionPane 类的静态方法
第9章组件及事件处理
public static String showInputDialog (Component parentComponent,
Object message,
String title,
int messageType)
可以创建一个 输入对话框,其中参数parentComponent指定输入对话框所依赖的组件,输入对话框会在该组件的正前方显示出来,如果parentComponent为null,输入对话框会在屏幕的正前方显示出来,参数message指定对话框上的提示信息,参数title 指定对话框上的标题,参数messageType可取的有效值是JOptionPane中的类常量:
●ERROR MESSAGE
●INFORMATION MESSAGE
●WARNING MESSAGE
●QUESTION_ MESSAGE
●PLAIN MESSAGE
无模式
这些位可以给出对话框的外观。如取值JoiPane WARNIN MSSE时对话框的外观上会有个明显的“1” 符号。
单击输入对话框上的确试按钮、取消按钮或关团图标,都可以使输入对话框消失不可见,如果单击的是确认按钮,输入对话框将这返回用户在对话框的文本输入对话框框中输入的字符事,否则返回null。输入数字,用空格分隔
在下面的例子17中,用户单击按安钮弹出输入对话框,用户如果单击输入对话框上的确定,在输入对话框中输入若干个数字程序中输入对话框的运行效果
public class Example9_17 {public static void main(String args[]) {WindowInput win=new WindowInput();win.setTitle("带输入对话框的窗口"); win.setBounds(80,90,600,400);}}
package 例题1;import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
import java.util.*;
public class WindowInput extends JFrame implements ActionListener {/*** */private static final long serialVersionUID = 5060348990465300142L;JTextArea showResult;JButton openInput;WindowInput() {openInput=new JButton("弹出输入对话框");showResult=new JTextArea(10,20);Font f =new Font("宋体",Font.PLAIN,23);showResult.setFont(f);this.setLayout(new FlowLayout());//设置为流式布局add(openInput);showResult.setLineWrap(true); //设置自动换行 add(new JScrollPane(showResult));openInput.addActionListener(this); setVisible(true);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}public void actionPerformed(ActionEvent e) { String str=JOptionPane.showInputDialog(this,"输入数字,用空格分隔","输入对话框",JOptionPane.PLAIN_MESSAGE);if(str!=null) {Scanner scanner = new Scanner(str);double sum=0;int k=0;while(scanner.hasNext()){try{double number=scanner.nextDouble();if(k==0)showResult.append(""+number);elseshowResult.append("+"+number);sum=sum+number;k++;} catch(InputMismatchException exp){String t=scanner.next();}}showResult.append("="+sum+"\n"); }}
}
确认对话框(弹出的对话框确认与否)
确认对话框是有模式对话框,JOptionPane 类的静态方法
public static int showConfi rmDialog (Component parent Component,
Object message,
String title,
int optionType)
得到一个确认对话框,其中参数parentComponent指定确认对话框可见时的位置,确认对话框在参数parentComponent指定的组件的正前方显示出来,
如果prnrCompone为nl确认对话框会在屏幕的正前方显示出来。messge 指定对话框上显示的消息,tile 指定确认对话框的标题,opionTrpe 可取的有效值是JptinPane中的类常量:
●YES_NO_OPTION
●YES _NO _CANCEL OPTION
●OK_ CANCEL _OPTION
这些值可以给出对话框的外观,例如,取值YES _NO CANCEL OPTION时,确认对话框的外观上有yes和no两个按钮。
当确认对话框消失后,JOptionPane.showConfirmDialog方法会返回下列整数值之一
●JOptionPane.YES OPTION
●JOptionPane.NO OPTION
●JOptionPane.CANCEL OPTION
●JOptionPane.OK OPTION
●JOptionPane.CLOSED OPTION
返回的具体值依赖于用户所单击的对话框上的按钮和对话框上的关闭图标。
在下面的例子18 中,用户在文本框中输入账户名称,按回车后,将弹出一个确认对话框。如果单击确认对话框上的“是()"按钮,就将名字放入文本区。程序中确认对话框的运行效果如图9.18所示。
public class Example9_18 {public static void main(String args[]) {WindowEnter win=new WindowEnter();win.setTitle("带确认对话框的窗口"); win.setBounds(80,90,500,300);}}
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
public class WindowEnter extends JFrame implements ActionListener {/*** */private static final long serialVersionUID = -7457112890172707618L;JTextField inputName; JTextArea save;WindowEnter(){inputName=new JTextField(22);inputName.addActionListener(this);save=new JTextArea(10,25);this.setLayout(new FlowLayout());add(inputName);save.setLineWrap(true); //设置自动换行 add(new JScrollPane(save));setVisible(true);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}public void actionPerformed(ActionEvent e) {String s=inputName.getText();int n=JOptionPane.showConfirmDialog(this,"确认是否正确","确认对话框",JOptionPane.YES_NO_OPTION );if(n==JOptionPane.YES_OPTION) { save.append("\n"+s);} else if(n==JOptionPane.NO_OPTION) { inputName.setText(null);}}
}