Java Swing 只關(guān)閉當(dāng)前窗體的實(shí)現(xiàn)
看到很多人都在詢問(wèn)怎么在java swing中只關(guān)閉當(dāng)前的窗體,因此寫下此文。
主界面主要是有兩個(gè)JButton,一個(gè)是通過(guò)按鈕事件調(diào)起另一個(gè)JFame,另一個(gè)是關(guān)閉當(dāng)前窗體。
1、關(guān)閉當(dāng)前窗體不能使用setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)方法,可以使用
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
2、通過(guò)JButton事件不能使用exit(),這樣會(huì)使得整個(gè)程序的窗體全部關(guān)閉,可以使用dispose();這樣就只關(guān)閉了當(dāng)前窗體
具體實(shí)現(xiàn)如下:
NewFrame.java
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class NewFrame extends JFrame {
/**
* called another JFrame
* close this JFrame
* write by Jimmy.li
* time:2016/4/6 22:55
*/
private static final long serialVersionUID = 1L;
public NewFrame() {
// 普通按鈕控件
JFrame jf = new JFrame("main");
Toolkit tk = this.getToolkit();// 得到窗口工具條
int width = 650;
int height = 500;
Dimension dm = tk.getScreenSize();
jf.setSize(300, 200);// 設(shè)置程序的大小
jf.setLocation((int) (dm.getWidth() - width) / 2,
(int) (dm.getHeight() - height) / 2);// 顯示在屏幕中央
jf.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
jf.setVisible(true);
JPanel contentPane = new JPanel();
jf.setContentPane(contentPane);
// 創(chuàng)建兩個(gè)按鈕,并且將按鈕添加到內(nèi)容面板中
JButton another = new JButton("另起頁(yè)面");
JButton close = new JButton("關(guān)閉");
contentPane.add(another);
contentPane.add(close);
another.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
new exit();
}
});
close.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
System.exit(0);
}
});
}
public static void main(String[] args)
{
new NewFrame();
}
}
效果圖如下:

只關(guān)閉exit的窗體,而不涉及父窗體。
exit.java代碼如下
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
/**
* called another JFrame close this JFrame write by Jimmy.li time:2016/4/6 22:55
*/
public class exit {
private static final int WIDTH = 300;
private static final int HEIGHT = 200;
public exit() {
// 普通按鈕控件
final JFrame jf = new JFrame("exit");
jf.setSize(WIDTH, HEIGHT);
jf.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
jf.setVisible(true);
JPanel contentPane = new JPanel();
jf.setContentPane(contentPane);
// 創(chuàng)建兩個(gè)按鈕并添加到內(nèi)容面板
JButton close1 = new JButton("關(guān)閉");
contentPane.add(close1);
close1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
// System.exit(0);
jf.dispose();
}
});
}
public static void main(String[] args)
{
new exit();
}
}
這樣通過(guò)點(diǎn)擊關(guān)閉按鈕,只關(guān)閉了當(dāng)前的exit窗體,而父窗體還存在。
補(bǔ)充知識(shí):java中JFrame和Frame的窗體關(guān)閉區(qū)別
在JFrame中是使用setDefaultCloseOperation()方法的,例如:
win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
在Frame中是使用一個(gè)事件監(jiān)聽(tīng)器,如下:
win.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
以上這篇Java Swing 只關(guān)閉當(dāng)前窗體的實(shí)現(xiàn)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
詳解spring cloud構(gòu)建微服務(wù)架構(gòu)的網(wǎng)關(guān)(API GateWay)
這篇文章主要介紹了詳解spring cloud構(gòu)建微服務(wù)架構(gòu)的網(wǎng)關(guān)(API GateWay),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-01-01
Java中Runnable和Callable分別什么時(shí)候使用
提到 Java 就不得不說(shuō)多線程了,就算你不想說(shuō),面試官也得讓你說(shuō)呀,那說(shuō)到線程,就不得不說(shuō)Runnable和Callable這兩個(gè)家伙了,二者在什么時(shí)候使用呢,下面就來(lái)和簡(jiǎn)單講講2023-08-08
淺談如何優(yōu)雅地停止Spring Boot應(yīng)用
這篇文章主要介紹了淺談如何優(yōu)雅地停止Spring Boot應(yīng)用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05
Java中的線程池如何實(shí)現(xiàn)線程復(fù)用
這篇文章主要介紹了Java中的線程池如何實(shí)現(xiàn)線程復(fù)用問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03
spring?boot?使用Mybatis-plus查詢方法解析
這篇文章主要介紹了spring?boot?使用Mybatis-plus查詢方法解析,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-09-09
使用synchronized關(guān)鍵字實(shí)現(xiàn)信號(hào)量的方法
在Java中,信號(hào)量(Semaphore)是一種常用的同步工具,它可以用來(lái)控制對(duì)共享資源的訪問(wèn)數(shù)量,下面,我們將使用Synchronized關(guān)鍵字來(lái)實(shí)現(xiàn)一個(gè)簡(jiǎn)單的信號(hào)量,我們的目標(biāo)是實(shí)現(xiàn)一個(gè)計(jì)數(shù)信號(hào)量,其中信號(hào)量的計(jì)數(shù)指示可以同時(shí)訪問(wèn)某一資源的線程數(shù),需要的朋友可以參考下2024-04-04
springboot基于過(guò)濾器實(shí)現(xiàn)接口請(qǐng)求耗時(shí)統(tǒng)計(jì)操作
這篇文章主要介紹了springboot基于過(guò)濾器實(shí)現(xiàn)接口請(qǐng)求耗時(shí)統(tǒng)計(jì)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-09-09

