Java如何实现关闭一个窗口弹出另外一个窗口

Python08

Java如何实现关闭一个窗口弹出另外一个窗口,第1张

在Java中,对窗口任何操作都会对应的监听事件,故要实现关闭一个窗口时弹出另外一个窗口,只需要在该关闭的窗口的监听事件中添加弹窗事件即可。

具体实现如下:

this.addWindowListener(new

WindowAdapter(){

@Override

public

void

windowClosing(WindowEvent

e)

{

setVisible(false)

new

JFrame("新窗口")

}})

在JavaGUI编程中,关闭窗口弹出新窗口是很常见的动作,比如一个窗口的业务操作完成了,需要跳转到另一个窗口继续执行,此时就需要关闭旧窗口并弹出新窗事件。值得注意的地方时,有时候的关闭往往只是暂时的将旧窗口暂时隐藏,而不是真的关闭,因为之后可能还会继续用到,为了节省开销,暂时的隐藏有利于提供效率。

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虚拟机退出

}

}

运行效果图:

在java中实现一个消息框, 常见的有两种方式

第一种方法: JOptionPane 类. 创建1个弹窗.

例一:简单的消息提示框

JOptionPane.showMessageDialog(null, "消息提示")

2.例二:带警告图片的消息提示框

JOptionPane.showMessageDialog(null, "提示消息", "标题",JOptionPane.WARNING_MESSAGE)

第二种方法 弹窗JDialog 设置setModal(true)也可以实现. 类似于写JFrame

两者区别在于:

JOptionPane 代码简短, 适应一些普通需求, 比如弹出消息提示, 弹出警告信息, 提示用户输入, 提示用户选择, 等简单的场景

JDialog 代码略长, 组件需要自行定义.  满足一些复杂的需求. 比如多个输入框 ,多个按钮等