package com.swing; import java.awt.event.WindowEvent; import java.awt.event.WindowFocusListener; import javax.swing.JFrame; public class TestJFrame extends JFrame{ public TestJFrame(){ init(); } public void init(){ this.setSize(400,300); this.setTitle("第一個JFrame窗體"); //this.setIconImage(image); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//這里是簡單的處理了用戶點擊關閉的事件, //如果想復雜的處理話就要使用事件處理機制 this.setResizable(false);//不能改變窗體大小 this.setVisible(true); this.addWindowFocusListener(new MyFocus()); //注冊一個窗體焦點的監聽器 } public static void main(String[] args) { new TestJFrame(); } /*窗體三種事件: * * 1. 焦點失去 * 2. 開/關窗體 * 3. 窗體狀態,比如最大,最小,調整大小 * * 事件處理要用監聽器來進行處理,監聽器可以有四種寫法 * 1. 內置監聽器(內部類的方式) ------------------二選 * 2. 自己監聽自己,查看 TestJFrame1.java * 3. 外置監聽器(外部類)TestJFrame2.java和MyFocus1.java * 4. 匿名類的使用(最麻煩的)TTestJFrame3.java ------------------首選 * * 使用監聽器可以發現監聽器都是接口,實現其要實現多個方法,代碼量大,代碼不簡潔 * 所以可以使用適配器來解決監聽器的問題,適配器其實就是空實現了三個接口的類 * WindowAdatper TestJFrame5.java * * */ //內部類,用處理於窗體焦點的監聽器 public class MyFocus implements WindowFocusListener{ @Override public void windowGainedFocus(WindowEvent e) { // TODO Auto-generated method stub System.out.println("游戲正在進行....."); } @Override public void windowLostFocus(WindowEvent e) { // TODO Auto-generated method stub System.out.println("游戲暫停....."); } } }
package com.swing; /* * * * 該類用於演示,自已監聽自己 * * * */ import java.awt.event.WindowEvent; import java.awt.event.WindowFocusListener; import java.awt.event.WindowListener; import javax.swing.JFrame; public class TestJFrame3 extends JFrame{ public TestJFrame3(){ init(); } public void init(){ this.setSize(400,300); this.setTitle("第一個JFrame窗體"); //this.setIconImage(image); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//這里是簡單的處理了用戶點擊關閉的事件, //如果想復雜的處理話就要使用事件處理機制 this.setResizable(false);//不能改變窗體大小 this.setVisible(true); this.addWindowFocusListener( new WindowFocusListener(){ @Override public void windowGainedFocus(WindowEvent e) { // TODO Auto-generated method stub System.out.println("游戲正在進行....."); } @Override public void windowLostFocus(WindowEvent e) { // TODO Auto-generated method stub System.out.println("游戲暫停....."); } } ); //注冊一個窗體焦點的監聽器 } public static void main(String[] args) { new TestJFrame3(); } }
package com.swing; import java.awt.event.WindowEvent; import java.awt.event.WindowFocusListener; import java.awt.event.WindowListener; import javax.swing.JFrame; import javax.swing.JOptionPane; public class TestJFrame4 extends JFrame{ public TestJFrame4(){ init(); } public void init(){ this.setSize(400,300); this.setTitle("第一個JFrame窗體"); //this.setIconImage(image); this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);//這里是簡單的處理了用戶點擊關閉的事件, //如果想復雜的處理話就要使用事件處理機制 this.setResizable(false);//不能改變窗體大小 this.setVisible(true); this.addWindowListener(new MyListener()); } public static void main(String[] args) { new TestJFrame4(); } public class MyListener implements WindowListener{ @Override public void windowActivated(WindowEvent e) { // TODO Auto-generated method stub } @Override public void windowClosed(WindowEvent e) { // TODO Auto-generated method stub } @Override public void windowClosing(WindowEvent e) { // TODO Auto-generated method stub //System.out.println("試圖關閉時調用,this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);一起使用"); //JOptionPane.showMessageDialog(null, "你要關閉窗體了", "警告", JOptionPane.WARNING_MESSAGE ); int i = JOptionPane.showConfirmDialog(null, "你沒有保存", "choose one", JOptionPane.YES_NO_CANCEL_OPTION); if(i==1){ JOptionPane.showMessageDialog(null, "你點了否", "警告", JOptionPane.WARNING_MESSAGE ); return; } if(i==2){ JOptionPane.showMessageDialog(null, "你點了取消", "警告", JOptionPane.WARNING_MESSAGE ); return; } if(i==0){ JOptionPane.showMessageDialog(null, "你點了是", "警告", JOptionPane.WARNING_MESSAGE ); System.exit(0); } } @Override public void windowDeactivated(WindowEvent e) { // TODO Auto-generated method stub } @Override public void windowDeiconified(WindowEvent e) { // TODO Auto-generated method stub } @Override public void windowIconified(WindowEvent e) { // TODO Auto-generated method stub } @Override public void windowOpened(WindowEvent e) { // TODO Auto-generated method stub } } }
package com.swing; import java.awt.Color; import java.awt.Container; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.awt.event.WindowFocusListener; import javax.swing.JFrame; public class TestJFrame5 extends JFrame{ public TestJFrame5(){ init(); } public void init(){ this.setSize(400,300); this.setTitle("第一個JFrame窗體"); //this.setIconImage(image); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//這里是簡單的處理了用戶點擊關閉的事件, //如果想復雜的處理話就要使用事件處理機制 //this.setResizable(false);//不能改變窗體大小 //得到內容面板,相當畫板上的紙 Container contatiner = this.getContentPane(); contatiner.setBackground(Color.BLUE); this.setVisible(true); this.addWindowListener(new WindowAdapter(){ @Override public void windowClosing(WindowEvent e) { // TODO Auto-generated method stub //super.windowClosing(e); System.out.println("adfsafsafafasf"); } @Override public void windowStateChanged(WindowEvent e) { // TODO Auto-generated method stub //super.windowStateChanged(e); System.out.println("adfsafsafafasf"); } @Override public void windowOpened(WindowEvent e) { // TODO Auto-generated method stub System.out.println("ddddddddddddddddd"); } @Override public void windowLostFocus(WindowEvent e) { // TODO Auto-generated method stub System.out.println("dddddddddaaaaaaaaaaaaaaadddddddd"); } @Override public void windowActivated(WindowEvent e) { // TODO Auto-generated method stub System.out.println("dddddddddaaaaaaaaaaaaaaadddddddd"); } }); } public static void main(String[] args) { new TestJFrame5(); } }