java对对话框的几种弹出方式

Python09

java对对话框的几种弹出方式,第1张

在Java中利用JOptionPane类中的各个static方法来生成各种标准的对话框,实现显示出信息、提出问题、警告、用户输入参数等功能。这些对话框都是模式对话框。 ConfirmDialog — 确认对话框,提出问题,然后由用户自己来确认(按"Yes"或"No"按钮) InputDialog — 提示输入文本 MessageDialog — 显示信息 OptionDialog -- 组合其它三个对话框类型。 这四个对话框可以采用showXXXDialog()来显示,如showConfirmDialog()显示确认对话框、 showInputDialog()显示输入文本对话框、showMessageDialog()显示信息对话框、showOptionDialog() 显示选择性的对话框。它们所使用的参数说明如下: ① ParentComponent:指示对话框的父窗口对象,一般为当前窗口。也可以为null即采用缺省的Frame作为父窗口,此时对话框将设置在屏幕的正中。 ② message:指示要在对话框内显示的描述性的文字 ③ String 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。 使用实例:(1)显示MessageDialog JOptionPane.showMessageDialog(null, "在对话框内显示的描述性的文字", "标题条文字串", JOptionPane.ERROR_MESSAGE)(2)显示ConfirmDialog JOptionPane.showConfirmDialog(null, "choose one", "choose one", JOptionPane.YES_NO_OPTION)(3)显示OptionDialog:该种对话框可以由用户自己来设置各个按钮的个数并返回用户点击各个按钮的序号(从0开始计数) Object[] options = {"确定","取消","帮助"}int response=JOptionPane.showOptionDialog(this, "这是个选项对话框,用户可以选择自己的按钮的个数", "选项对话框标题",JOptionPane.YES_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, options[0])if(response==0) { this.setTitle("您按下了第OK按钮 ")}else if(response==1) { this.setTitle("您按下了第Cancel按钮 ")}else if(response==2) { this.setTitle("您按下了第Help按钮 ")}(4)显示InputDialog 以便让用户进行输入 String inputValue = JOptionPane.showInputDialog("Please input a value")(5)显示InputDialog 以便让用户进行选择地输入 Object[] possibleValues = { "First", "Second", "Third" }//用户的选择项目 setTitle("您按下了"+(String)selectedValue+"项目")No related posts.

import java.awt.Rectangle

import java.math.BigDecimal

import javax.swing.JButton

import javax.swing.JFrame

import javax.swing.JLabel

import javax.swing.JPanel

import javax.swing.JTextArea

import javax.swing.JTextField

public class Test {

private static JTextField jf =null//长度值

private static JTextField jf1 =null//宽度值

public static void main(String[] args) {

JFrame frame=new JFrame("求矩形面积")

JPanel p = new JPanel()// 建立一个面板

JLabel chang = new JLabel("长:")

chang.setBounds(new Rectangle(18, 53, 150, 38))

jf=new JTextField(20)

jf.setBounds(new Rectangle(50, 56, 150, 25))

JLabel kuan = new JLabel("宽:")

kuan.setBounds(new Rectangle(18, 107, 150, 38))

jf1=new JTextField(20)

jf1.setBounds(new Rectangle(50, 111, 150, 25))

JButton jb=new JButton("确认")

jb.setBounds(new Rectangle(18, 107*2-53, 150, 38))

jb.addActionListener(new java.awt.event.ActionListener() {

public void actionPerformed(java.awt.event.ActionEvent e) {

if(jf.getText()!=null&&jf1!=null){

JFrame f=new JFrame("结果:")

JPanel p1 = new JPanel()

String cd=jf.getText()

String kd=jf1.getText()

p1.setLayout(null)

String str = ""

boolean flag = true

if(cd.equals("")){

str+="长不能为空,"

flag = false

}

                  if(kd.equals("")){

str+="宽不能为空,"

flag=false

}                

                  if(flag){

                  if(Double.parseDouble(cd)<=0){

  str+="长度需为正数!"

  flag=false

  }

                  if(Double.parseDouble(kd)<=0){

    str+="宽度需为正数!"

    flag=false

    }

                  if(flag){                    

                        str="矩形长:"+jf.getText()+",宽:"+jf1.getText()+",面积:"+mianji(cd,kd)

                  }

                  }else{

                  str=str.substring(0, str.length()-1)

                  }

                  JTextArea text=new JTextArea()

text.setBounds(new Rectangle(18, 40, 100, 40))

text.setText(str)

text.setEditable(false)

text.setLineWrap(true)

text.setWrapStyleWord(true)

p1.add(text)

f.add(p1)

f.setSize(200,200)

f.setLocationRelativeTo(null)

f.setVisible(true)

f.setAlwaysOnTop(true)

}

}

})

p.add(chang,null)

p.add(jf)

p.add(kuan,null)

p.add(jf1)

p.setLayout(null)

p.add(jb)

frame.add(p)//将面板添加到窗口

frame.setSize(300,300)//设置窗口大小

frame.setAlwaysOnTop(true)//设置窗口始终在最上层

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)//设置默认的关闭操作,关闭窗口后退出程序

frame.setLocationRelativeTo(null)//设置窗口居中

frame.setVisible(true)//设置窗口可见,尽快调用paint()方法

frame.setResizable(false)

}

/**计算面积的算法,为了使计算精确采用BigDecimal*/

public static  double  mianji(String cd,String kd) {

BigDecimal bdcd=new BigDecimal(cd)

BigDecimal bdkd=new BigDecimal(kd)

return bdcd.multiply(bdkd).doubleValue()

}

}

运行了下效果如图:

JAVA弹窗,有下面常见的2种方法实现:

通过JDialog(模式窗口) 类来实现.里面的写法类似JFrame

重点方法提示: setModal(true)

//当设置为true表示,如果不关闭这个弹窗,那么主界面的其他组件都无法操作,该弹窗置于其他窗口的前面

//当设置为false表示,可以绕开本弹窗,对主界面的其他组件进行操作

优点: 功能强大,  扩展性强

缺点: 代码量大.

示例图

通过JOptionPane(提示框) 来实现

效果图如下

优点: 代码量少,简单,方便, 普通场景已经够用

缺点: 扩展性不够, 复杂逻辑难以实现.

下面写一个具体案例

场景:当用于对文本域的文字,进行操作后,那么退出时,提示用户, 是否要保存已经更改后的内容.  如果用户没有修改内容,那么不用提示

重点代码

addDocumentListener-->用于实现对文本内容发生改变时进行响应

addWindowListener--->用于实现对窗口进行操作时进行响应

完整代码如下

import java.awt.Font

import java.awt.event.*

import javax.swing.*

import javax.swing.event.*

public class JDDemo extends JFrame implements DocumentListener,WindowListener{

JTextArea jta

boolean flag

public JDDemo() {

jta = new JTextArea()//文本域

jta.setText("床前明月光")//文本域的文字-->可以通过IO加载txt文档的文字

jta.setFont(new Font("宋体",Font.BOLD, 20))//文本域的字体

jta.setLineWrap(true)//设置自动换行

jta.getDocument().addDocumentListener(this)//添加文档变化事件的响应.比如修改,删除等

JScrollPane jsp = new JScrollPane(jta)//滚动面板(当文字太多时,显示滚动条)

add(jsp)

setTitle("主窗口")//标题

setSize(300, 260)//大小

setLocationRelativeTo(null)//居中

setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE)//点击窗口的关闭按钮时,执行windowClosing的代码

addWindowListener(this)

setVisible(true)//窗口可见

}

public static void main(String[] args) {

new JDDemo()

}

//实现WindowListener接口,需要重写下面的6个方法, windowClosing专门处理关闭时的方法

public void windowOpened(WindowEvent e) {

}

public void windowClosing(WindowEvent e) {

if(flag){

int n = JOptionPane.showConfirmDialog(null, "已经更改了内容,需要保存后再退出吗?", "提示",JOptionPane.YES_NO_OPTION)

//n等于-1表示关闭了弹出的对话框等情况的默认值

//n等于0(JOptionPane.YES_OPTION)表示选择了Yes

//n等于1(JOptionPane.NO_OPTION)表示选择了No

if(n==JOptionPane.YES_OPTION){

//把文字保存到文件的代码省略...

System.out.println("正在使用IO进行保存..ing")

closeFrame()//关闭窗口并退出

}else if(n==JOptionPane.NO_OPTION){

System.out.println("放弃保存修改.马上退出")

closeFrame()

}

}else{

closeFrame()

}

}

public void windowClosed(WindowEvent e) {

}

public void windowIconified(WindowEvent e) {

}

public void windowDeiconified(WindowEvent e) {

}

public void windowActivated(WindowEvent e) {

}

public void windowDeactivated(WindowEvent e) {

}

//文档事件,有下面三个,如果触发其中一个,都可以认为修改了文档,所以需要在退出时进行提示,是否保存

public void insertUpdate(DocumentEvent e) {//插入

flag=true

}

public void removeUpdate(DocumentEvent e) {//删除

flag=true

}

public void changedUpdate(DocumentEvent e) {//改变

flag=true

}

//关闭窗口的方法

public void closeFrame(){

this.setVisible(false)//窗口不可见

this.dispose()//窗口销毁

System.exit(0)//JVM虚拟机退出

}

}

运行效果图: