使用Java编写GUI对话框的教程_java

对话框是为了人机对话过程提供交互模式的工具。应用程序通过对话框,或给用户提供信息,或从用户获得信息。对话框是一个临时窗口,可以在其中放置用于得到用户输入的控件。在Swing中,有两个对话框类,它们是JDialog类和JOptionPane类。JDialog类提供构造并管理通用对话框;JOptionPane类给一些常见的对话框提供许多便于使用的选项,例如,简单的“yes-no”对话框等。
JDialog类

JDialog类作作对话框的基类。对话框与一般窗口不同,对话框依赖其他窗口,当它所依赖的窗口消失或最小化时,对话框也将消失;窗口还原时,对话框又会自动恢复。

对话框分为强制和非强制两种。强制型对话框不能中断对话过程,直至对话框结束,才让程序响应对话框以外的事件。非强制型对话框可以中断对话过程,去响应对话框以外的事件。强制型也称有模式对话框,非强制对话框也称非模式对话框。

JDialog对象也是一种容器,因此也可以给JDialog对话框指派布局管理器,对话框的默认布局为BoarderLayout布局。但组件不能直接加到对话框中,对话框也包含一个内容面板,应当把组件加到JDialog对象的内容面板中。由于对话框依赖窗口,因此要建立对话框,必须先要创建一个窗口。

JDialog类常用的构造方法有3个:

  1. JDialog(),构造一个初始化不可见的非强制型对话框。
  2. JDialog(JFramef,String s),构造一个初始化不可见的非强制型对话框,参数f设置对话框所依赖的窗口,参数s用于设置标题。通常先声明一个JDialog类的子类,然后创建这个子类的一个对象,就建立了一个对话框。
  3. JDialog(JFrame f,String s,boolean b),构造一个标题为s,初始化不可见的对话框。参数f设置对话框所依赖的窗口,参数b决定对话框是否强制或非强制型。

JDialog类的其他常用方法有以下几个:

  • getTitle(),获取对话框的标题。
  • setTitle(String s),设置对话框的标题。
  • setModal(boolean b),设置对话框的模式。
  • setSize(),设置框的大小。
  • setVisible(boolean b),显示或隐藏对话框。

【例】小应用程序声明一个用户窗口类和对话框类,用户窗口有两个按钮和两个文本框,当点击某个按钮时,对应的对话框被激活。在对话框中输入相应信息,按对话框的确定按钮。确定按钮的监视方法,将对话框中输入的信息传送给用户窗口,并在用户窗口的相应文本框中显示选择信息。

import java.applet.*
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class MyWindow extends JFrame implements ActionListener{
  private JButton button1,button2;
  private static int flg=0;
  private static JTextField text1,text2;
  Mywindow(String s){
    super(s);
    Container con = this.getContentPane();
    con.setLayout(new GridLayout(2,2));
    this.setSize(200,100);
    this setLocation(100,100);
    button1 = new JButton("选择水果");
    button2 = new JButton("选择食品");
    button1.addActionListener(this);
    button2.addActionListener(this);
    text1 = new JTextField(20);
    text2 = new JTextField(20);
    con.add(button1);
    con.add(button2);
    con.add(text1);
    con.add(text2);
    this.setVisible(true);
    this.pack();
  }
  public static void returnName(String s){
    if(flg ==1)
      text1.setText("选择的水果是:"+s);
    else if(flg == 2)
      text2.setText("选择的食品是:"+s);
  }
  public void actionPerformed(ActionEvent e){
    MyDialog dialog;
    if(e.getSource()==button1){
      dialog = new MyDialog(this,"水果");
      dialog.setVisible(true);
      flg =1;
    }
    else if(e.getSource()==button2){
      dialog =new MyDialog(this,"食品");
      dialog.setVisible(true);
      flg=2;
    }
  }
}
class MyDialog extends JDialog implements ActionListener{
  JLabel title;
  JTextField text;
  JButton done;
  Mydialog(JFrame F,String s){
    super(F,s,true);//模态
    Container con = this.getContentPane();
    title = new JLabel("输入"+s+"名称");
    text = new JTextField(10);
    text.setEditable(true);
    con.setLayout(new FlowLayout());
    con.setSize(200,100);
    setModal(false);
    done = new JButton("确定");
    done.addActionListener(this);
    con.setVisible(true);
    this.pack();
  }
  public void actionPerformed(ActionEvent e){
    MyWindow.returnName(text.getText());
    setVisible(false);
    dispose();
  }
}
public class Example6_6 extends Applet{
  MyWindow window;
  MyDialog dialog;
  public void init(){
    window = new MyWindow("带对话框窗口");
  }
}

上述例子创建的是强制型对话框,改为非强制型对话框就允许用户在对话过程中暂停,与程序的其他部分进行交互。这样,在界面中可以看到部分对话的效果。

将上述例子改为非强制型对话框只要作少量的改动即可。首先是将对话框构造方法中的代码“super(F,s,true);”改为 “super(F,s,false);”。

第二个变化:原来是响应确定按钮事件时,才调用方法returnName(),将对话框得到的字符串返回给程序。现在当文本框输入选择字符串结束后,就应该立即调用该方法。为此,需要对文本框的输入事件作监视,为文本注册监视器:

public void actionPerformed(ActionEvent e){
  if(e.getSource()==text){
    MyWindow.returnName(text.getText());
  }
  else if(e.getSource()==done){
    MyWindow.returnName(text.getText());
    setVisible(false);
    dispose();//清除资源
  }
}

JOptionPane类

经常遇到非常简单的对话情况,为了简化常见对话框的编程,JOptionPane类定义了四个简单对话框类型,参见表11-4。JOptionPane类提供一组静态方法,让用户选用某种类型的对话框。下面的代码是选用确认对话框:

  int result = JOptionPane.showConfirmDialog(parent,“确实要退出吗”, “退出确认“,JOptionPane.YES_NO_CANCEL_OPTION);

其中方法名的中间部分文字“Confirm”是创建对话框的类型,文字Confirm指明是选用确认对话框。将文字Confirm改为另外三种类型的某一个,就成为相应类型的对话框。上述代码的四个参数的意义是:第一个参数指定这个对话框的父窗口;第二个参数是对话框显示的文字;第三个参数是对话框的标题;最后一个参数指明对话框有三个按钮,分别为“是(Y)”,“否(N)”,和“撤销”。方法的返回结果是用户响应了这个对话框后的结果,参见表 11-5 给出的可能答案。

输入对话框以列表或文本框形式请求用户输入选择信息,用户可以从列表中选择选项或从文本框中输入信息。以下是一个从列表中选择运行项目的输入对话框的示意代码:

  String result = (String)JOptionPane.showInputDialog(parent,
    “请选择一项运动项目”, “这是运动项目选择对话框”,
    JOptionPane.QUESTION_MESSAGE,null,
    new Object[]{“踢足球“,“打篮球”,“跑步”,“跳绳”},“跑步”);

第四个参数是信息类型,第五个参数在这里没有特别的作用,总是用null;第六个参数定义了一个供选择的字符串数组,第七个参数是选择的默认值。对话框还包括“确定”和“撤销”按钮。
JOptionPane对话框类型

由 JOptionPane 对话框返回的结果

JOptionPane 对话框的信息类型选项

有时,程序只是简单地输出一些信息,并不要求用户有反馈。这样的对话框可用以下形式的代码创建:

  JOptionPane.showMessageDialog(parent, “这是一个Java程序”,
    “我是输出信息对话框”,JOptionPane.PLAIN_MESSAGE);

上述代码中前三参数的意义与前面所述相同,最后参数是指定信息类型为不包括任何图标。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索java
对话框
java gui 弹出对话框、java gui 对话框、java编写gui、wxlua编写gui教程、java编写对话框,以便于您获取更多的相关知识。

时间: 2024-11-09 00:58:02

使用Java编写GUI对话框的教程_java的相关文章

详解如何使用Java编写图形化的窗口_java

窗口是GUI编程的基础,小应用程序或图形界面的应用程序的可视组件都放在窗口中,在GUI中,窗口是用户屏幕的一部分,起着在屏幕中一个小屏幕的作用.有以下三种窗口: Applet窗口:Applet类管理这个窗口,当应用程序程序启动时,由系统创建和处理: 框架窗口(JFrame):这是通常意义上的窗口,它支持窗口周边的框架.标题栏,以及最小化.最大化和关闭按钮: 一种无边框窗口(JWindow):没有标题栏,没有框架,只是一个空的矩形. 用Swing中的JFrame类或它的子类创建的对象就是JFram

java编写贪吃蛇小游戏_java

废话不多说,直接奉上代码: Frame.java package snake; import java.awt.Graphics; import java.awt.Menu; import java.awt.MenuBar; import java.awt.MenuItem; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import

Java编写猜数字小游戏_java

本文实例讲述了java实现的简单猜数字游戏代码.分享给大家供大家参考. 以下是Java语言写的一个猜数字小游戏引用片段: import java.text.SimpleDateFormat; import java.util.Date; import java.util.Scanner; //主函数 public class calssOne { public static void main(String[] args) { //shit+Ctrl+o int result; //随机产生一个

java swing标准对话框具体实现_java

复制代码 代码如下: package test001;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JOptionPane;import javax.swing.JToolBar;public class TestJOptionPane implements

java编写简单的ATM存取系统_java

新手练手必备~ 密码账户为: 先创建账户类: 复制代码 代码如下: package cn.Atm; /** * @author 偶my耶 */ import java.io.*; import com.project.project; public class Account {   private String number=null;   private String name=null;   private String password=null;   private double mo

Java实现数据库连接池简易教程_java

一.引言 池化技术在Java中应用的很广泛,简而论之,使用对象池存储某个实例数受限制的实例,开发者从对象池中获取实例,使用完之后再换回对象池,从而在一定程度上减少了系统频繁创建对象销毁对象的开销.Java线程池和数据库连接池就是典型的应用,但并非所有的对象都适合拿来池化,对于创建开销比较小的对象拿来池化反而会影响性能,因为维护对象池也需要一定的资源开销,对于创建开销较大,又频繁创建使用的对象,采用池化技术会极大提高性能. 业界有很多成熟的数据库连接池,比如C3P0,DBCP,Proxool以及阿

Java数组的基本学习教程_java

Java数组声明.创建.初始化一维数组的声明方式: type var[]; 或type[] var; 声明数组时不能指定其长度(数组中元素的个数), Java中使用关键字new创建数组对象,格式为: 数组名 = new 数组元素的类型 [数组元素的个数] 实例: TestNew.java: 程序代码: public class TestNew { public static void main(String args[]) { int[] s ; int i ; s = new int[5] ;

用java 编写一个手机联系人管理的GUI

问题描述 用java 编写一个手机联系人管理的GUI 使用hashtabel 保存数据 解决方案 hashtable效率不是很好,建议使用ConcurrentHashMap 解决方案二: 使用WindowBuilder,可视化编程,控件都是直接拖动就能布局

Java的JNI快速入门教程(推荐)_java

1. JNI简介 JNI是Java Native Interface的英文缩写,意为Java本地接口. 问题来源:由于Java编写底层的应用较难实现,在一些实时性要求非常高的部分Java较难胜任(实时性要求高的地方目前还未涉及,实时性这类话题有待考究). 解决办法:Java使用JNI可以调用现有的本地库(C/C++开发任何和系统相关的程序和类库),极大地灵活Java的开发. 2. JNI快速学习教程 2.1 问题: 使用JNI写一段代码,实现string_Java_Test_helloworld