zoukankan      html  css  js  c++  java
  • 子窗口切换java应用中的子窗口切换,引出抽象类与接口的本质区别

    时间紧张,先记一笔,后续优化与完善。

             今天一同窗问我,如何在一个java应用窗口(JFrame)中切换其内的子窗口(JInternalFrame)。

             我想了一下,因为全部的子窗口都可以说是有独特特性的对象,觉得用抽象类来代表一个最原始的子窗口类,并在这个抽象类中建立一个方法专门来担任窗口切换,全部继承它的子窗口都可以用到这个方法来实现切换功能。

             我一说抽象类,他说到现在还未搞懂抽象类还有接口到底是用来干什么的。而且上述问题为什么不用接口来实现,定义一个切换方法,全部实现它的子窗口都实现这个切换方法。暂且不说抽象类与接口的区分。现在将上述问题的扼要代码给出:

        抽象子窗口父类:

    import java.awt.FlowLayout;
    import javax.swing.JInternalFrame;
    
    //全部子窗口的父类
    public abstract class Parent extends JInternalFrame {
    	
    	MainFrame main;
    	public Parent() {
    	}
    
    	public Parent(MainFrame main) {
    		this.main = main;
    		
    		//这里可以设置一些子窗口同一的属性,如背景,字体大小等等
    		this.setLayout(new FlowLayout(FlowLayout.CENTER));
    	}
    
    	//切换到其它子窗口的方法
    	public void toOtherFrame(Parent p) {
    		this.setVisible(false);
    		p.setVisible(true);
    	}
    }

             大多数情况下,为了便利管理,程序须要找一个管理全部引用的对象,由于全部的子窗口都在应用窗口下,故让应用窗口对象来持众多子窗口对象。可以看出,用抽象类来实现,当我们要切换窗口时,只要子窗口继承了这个Parent类,其都可以当作一个切换对象传进来。

        基于这个Parent类,创建欢迎子窗口(WelcomeFrame)与结束子窗口(GoodbyeFrame):

        

    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.JButton;
    
    public class WelcomeFrame extends Parent{
    	
    	public WelcomeFrame(MainFrame main){
    		//全部对象都同父类一样,持有管理者的引用。
    		super(main);
    		launchFrame();
    	}
    
    	private void launchFrame() {
    		this.setTitle("WELCOME");
    		this.setVisible(true);
    		JButton jb = new JButton("去GOODBYEFRAME");
    		jb.addActionListener(new ActionListener() {
    			@Override
    			public void actionPerformed(ActionEvent e) {
    				//调用父类的切换方法,将要切换的子窗口对象传入
    				WelcomeFrame.this.toOtherFrame(main.getOf());
    			}
    		});
    		this.add(jb);		
    	}
    }
        每日一道理
    冰心说道:“爱在左,同情在右,走在生命的两旁,随时撒种,随时开花,将这一径长途,点缀得香花弥漫,使穿枝拂叶的行人,踏着荆棘,不觉得痛苦,有泪可落,却不是悲凉。”
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.JButton;
    
    public class GoodbyeFrame extends Parent{
    
    	public GoodbyeFrame(MainFrame main){
    		//全部对象都同父类一样,持有管理者的引用。
    		super(main);
    		launchFrame();
    	}
    
    	private void launchFrame() {
    		this.setTitle("GOODBYE");
    		this.setVisible(true);
    		JButton jb = new JButton("去WELCOMEFRAME");
    		jb.addActionListener(new ActionListener() {
    			@Override
    			public void actionPerformed(ActionEvent e) {
    				//调用父类的切换方法,将要切换的子窗口对象传入
    				GoodbyeFrame.this.toOtherFrame(main.getWf());
    			}
    		});
    		this.add(jb);		
    	}
    }

        应用窗口(MainFrame):

        

    import javax.swing.JFrame;
    
    public class MainFrame extends JFrame {
    
    	private WelcomeFrame wf = null;
    	private GoodbyeFrame of = null;
    
    	public WelcomeFrame getWf() {
    		return wf;
    	}
    
    	public void setWf(WelcomeFrame wf) {
    		this.wf = wf;
    	}
    
    	public GoodbyeFrame getOf() {
    		return of;
    	}
    
    	public void setOf(GoodbyeFrame of) {
    		this.of = of;
    	}
    
    	public static void main(String[] args) {
    		new MainFrame().launchFrame();
    	}
    
    	private void launchFrame() {
    		this.setBounds(200, 100, 400, 400);
    		this.setLayout(null);
    		wf = new WelcomeFrame(this);
    		of = new GoodbyeFrame(this);
    		wf.setBounds(0, 0, 385, 365);
    		of.setBounds(0, 0, 385, 365);
    		this.add(wf);
    		this.add(of);
    		this.setVisible(true);
    	}
    }

        通过上述的例子,可以看出抽象类的应用确实为程序功能的实现提供很大的帮助,至少不至于为每个子窗口都写一个切换的方法,而且切换窗口的方法,所传递的对象也是java多态的一种表现。

            回到同窗的问题上,为什么不用接口?。

            通常来讲,站在语言本身的计划理念上来讲,接口表示的是一种行为模型,一个类实现了某个接口,也就代表着其具有某种行为能力,从java所提供的一些经常使用接口就可以看出这些特性,如Cloneable,Serializable,Comparable等等,上述问题为接口也不能说是错的,条条道路通罗马,但是应用接口须要为每个子窗口实现切换窗口的方法,不过接口可以提供很灵活的切换功能(如果须要的话)。

            而对于抽象类,通常是"继承什么抽象类,就是什么",说的是‘is’的观点,Parent是子窗口,其继承它的子类必然也是一个子窗口对象。

           观点纯属个人理解,希望对大家的有所帮助,有不足之处,还望指出,独特学习,独特进步。

        

    文章结束给大家分享下程序员的一些笑话语录: 不会,Intel会维持高利润,也会维持竞争局面,国外的竞争不是打死对方的那种。你看日本有尼康,佳能,索尼,都做相机,大家都过得很滋润。别看一堆厂,其实真正控制的是后面的那几个财团——有些竞争对手,后面其实是一家人。

    --------------------------------- 原创文章 By
    子窗口和切换
    ---------------------------------

  • 相关阅读:
    Leetcode 238. Product of Array Except Self
    Leetcode 103. Binary Tree Zigzag Level Order Traversal
    Leetcode 290. Word Pattern
    Leetcode 205. Isomorphic Strings
    Leetcode 107. Binary Tree Level Order Traversal II
    Leetcode 102. Binary Tree Level Order Traversal
    三目运算符
    简单判断案例— 分支结构的应用
    用switch判断月份的练习
    java基本打印练习《我行我素购物系统》
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3106619.html
Copyright © 2011-2022 走看看