用java单例模式实现面板切换
1、首先介绍一下什么是单例模式:
java单例模式是一种常见的设计模式,那么我们先看看懒汉模式:
public class Singleton_ {
//设为私有方法,防止被外部类引用或实例
private Singleton_(){
System.out.println("懒汉单例模式");
}
private static Singleton_ single = null;
//并对外只暴露getInstance()方法,这是获取唯一实例方法。
public static Singleton_ getInstance(){
if(single==null)
single = new Singleton_();
return single;
}
}
这是没有考虑线程安全问题的,因为在线程并发的情况下,容易有多个实例,所以这是个线程不安全的模式。还有像饿汉模式这样的:
//饿汉式单例类.在类初始化时,已经自行实例化
public class Singleton1 {
private Singleton1() {}
private static final Singleton1 single = new Singleton1();
//对外只暴露getInstance()方法,这是获取唯一实例方法。
public static Singleton1 getInstance() {
return single;
}
}
这个模式在类初始化的时候就已经实例化了,保证了唯一一个实例,这是线程安全的。
2、简单了解了什么是单例模式后,我们来用一个具体实例看看,怎么样实现在JFrame界面切换的时候可以只有一个主窗体,而不需要,不停地实例化和销毁它。
主类继承JFrame,所以直接实例化本类并显示就可以了。
import javax.swing.JFrame;
public class Singleton_ extends JFrame{
private static Singleton_ single = null;
//对外只暴露getInstance()方法,这是获取唯一实例方法。
public static Singleton_ getInstance(){
if(single==null)
single = new Singleton_();
return single;
}
public static void main(String args[]){
Singleton_ singleton_ = new Singleton_();//实例化唯一窗口与
singleton_.setTitle("单例模式窗口");
singleton_.setVisible(true);
}
//设为私有方法,防止被外部类引用或实例
private Singleton_(){
setBounds(100, 100, 461, 286);
setContentPane(Panel_01.getInstance(this));
}
}
这是一个JPanel面板类,他也是一个单例模式,返回的是一个JPanel实例。
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel; public class Panel_01 extends JPanel{
private JButton but_01;
private JPanel jPanel;
private Panel_01(final JFrame jFrame){
setLayout(null);
System.out.println("正常");
but_01 = new JButton("界面1");
//点击事件
but_01.addActionListener(new ActionListener() { @Override
public void actionPerformed(ActionEvent e) {
if(e.getSource()==but_01){
jFrame.setContentPane(Panel_02.getInstance(jFrame));
jFrame.validate();//使面板生效,刷新
}
}
});
but_01.setBounds(120, 45, 71, 28);
jPanel = new JPanel();
jPanel.setLayout(null);
jPanel.setBounds(0, 76, 450, 224);
jPanel.add(but_01);
add(jPanel);
}
private static Panel_01 panel_01 = null;
public static Panel_01 getInstance(JFrame jFrame){
panel_01 = new Panel_01(jFrame);
return panel_01;
}
}
第二个JPanel类
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel; public class Panel_02 extends JPanel{
private JLabel jLabel = null;
private JButton but_02 = null;
//私有方法
private Panel_02(JFrame jFrame){
jLabel = new JLabel("界面1");
jLabel.setBounds(0, 0, 100, 100);
but_02 = new JButton("返回");
//点击事件
but_02.addActionListener(new ActionListener() { @Override
public void actionPerformed(ActionEvent e) {
if(e.getSource()==but_02){
jFrame.setContentPane(Panel_01.getInstance(jFrame));
jFrame.validate();//刷新
}
}
});
jLabel.setBounds(100, 100, 100, 100);
add(but_02);
add(jLabel);
}
private static Panel_02 panel_02=null;
//对外接口
public static Panel_02 getInstance(JFrame jFrame){
panel_02 = new Panel_02(jFrame);
return panel_02;
}
}
本个案例主要实现了类只有一个JFrame窗口,而在使用功能的时候,只有里面的JPanel面板不断的切换,不影响主窗体的状态。而且一般这种类型的界面最好都是采用单例模式会好一点。(这是本人第一次写博客,有不好的地方欢迎大家指出,我会不断改进更新的,谢谢!)
用java单例模式实现面板切换的更多相关文章
- 【深入】java 单例模式(转)
[深入]java 单例模式 关于单例模式的文章,其实网上早就已经泛滥了.但一个小小的单例,里面却是有着许多的变化.网上的文章大多也是提到了其中的一个或几个点,很少有比较全面且脉络清晰的文章,于是,我便 ...
- 深入Java单例模式(转)
深入Java单例模式 源自 http://devbean.blog.51cto.com/448512/203501 在GoF的23种设计模式中,单例模式是比较简单的一种.然而,有时候越是简单的东西越容 ...
- Axure之动态面板:登录面板切换
无论是谁,在刚开始接触一门不太熟悉的东西时都有一种恐惧感,但是慢慢多练习几遍,再多琢磨琢磨,形成自己的见解和认识,就掌握的差不多了.我说的是题外话,现在转入正题. 面板切换,也就是我们通常所有的tab ...
- Java 单例模式的七种写法
Java 单例模式的七种写法 第一种(懒汉,线程不安全) public class Singleton { private static Singleton instance; private Sin ...
- java单例模式之懒汉式分析
转自:http://blog.csdn.net/withiter/article/details/8140338 今天中午闲着没事,就随便写点关于Java单例模式的.其实单例模式实现有很多方法,这里我 ...
- Java 单例模式探讨
以下是我再次研究单例(Java 单例模式缺点)时在网上收集的资料,相信你们看完就对单例完全掌握了 Java单例模式应该是看起来以及用起来简单的一种设计模式,但是就实现方式以及原理来说,也并不浅显哦. ...
- 快乐学习 Ionic Framework+PhoneGap 手册1-3 {面板切换}
编程的快乐和乐趣,来自于能成功运行程序并运用到项目中,会在后面案例,实际运用到项目当中与数据更新一起说明 从面板切换开始,请看效果图和代码,这只是一个面板切换的效果 Index HTML Code & ...
- 单例模式:Java单例模式的几种写法及它们的优缺点
总结下Java单例模式的几种写法: 1. 饿汉式 public class Singleton { private static Singleton instance = new Singleton( ...
- 9种Java单例模式详解(推荐)
单例模式的特点 一个类只允许产生一个实例化对象. 单例类构造方法私有化,不允许外部创建对象. 单例类向外提供静态方法,调用方法返回内部创建的实例化对象. 懒汉式(线程不安全) 其主要表现在单例类在外 ...
随机推荐
- XSS 前端防火墙 —— 可疑模块拦截
上一篇介绍的系统,已能预警现实中的大多数 XSS 攻击,但想绕过还是很容易的. 由于是在前端防护,策略配置都能在源代码里找到,因此很快就能试出破解方案.并且攻击者可以屏蔽日志接口,在自己电脑上永不发出 ...
- Mac-OSX的Python3.5虚拟环境下安装Opencv
Mac-OSX的Python3.5虚拟环境下安装Opencv 1 关键词 关键词:Mac,OSX,Python3.5,Virtualenv,Opencv 2 概述 本文是一篇 环境搭建 的基础 ...
- web前端的春天 or 噩梦
「 微信应用号可以做什么」 简单说,微信"小程序"可以为开发者提供基于微信的表单.导航.地图.媒体和位置等开发组件,让他们在微信的网页里构建一个 HTML 5 应用.同时微信还开放 ...
- MapReduce剖析笔记之六:TaskTracker初始化任务并启动JVM过程
在上面一节我们分析了JobTracker调用JobQueueTaskScheduler进行任务分配,JobQueueTaskScheduler又调用JobInProgress按照一定顺序查找任务的流程 ...
- 使用 Code Snippet 简化 Coding
在开发的项目的时候,你是否经常遇到需要重复编写一些类似的代码,比如是否经常会使用 for.foreach ? 在编写这两个循环语句的时候,你是一个字符一个字符敲还是使用 Visual Studio 提 ...
- Go语言实战 - 我需要站内搜索
山坡网的用户抱怨"为什么搜索'二鬼子李富贵'找不到'二鬼子汉奸李富贵'?我用百度搜都能找到." 当时我就滴汗了,用户说的有道理,应该要能搜索到. 之前的方案很简单,用户输入的字串会 ...
- Java 设计模式 —— 单例模式
1. 概念: 单例模式是一种常用的软件设计模式.核心结构中只包含一个被称为单例的特殊类.通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源.如果 ...
- Livecoding.tv 现正举行iOS及Android App设计比赛
近日,Livecoding.tv, 一个为世界各地的程序员提供在线实时交流的平台,在其网站上发布了一篇通知, 宣布从4月15日至5月15日,会为iOS和Android的开发者举办一场本地移动app设计 ...
- JavaScript权威设计--跨域,XMLHttpRequest(简要学习笔记十九)
1.跨域指的是什么? URL 说明 是否允许通信 http://www.a.com/a.jshttp://www.a.com/b.js 同一域名下 允许 http://www.a.com/lab/a. ...
- Python标准模块--built-ins函数
1.Python内置函数 2.Python内置函数举例 2.1 数学运算 abs,计算绝对值: >>> abs(-1) 1 >>> abs(3) 3 round,四 ...