用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单例模式详解(推荐)
单例模式的特点 一个类只允许产生一个实例化对象. 单例类构造方法私有化,不允许外部创建对象. 单例类向外提供静态方法,调用方法返回内部创建的实例化对象. 懒汉式(线程不安全) 其主要表现在单例类在外 ...
随机推荐
- PHP相关代码
1 <html> <head> <meta http-equiv="content-type" content="text/h ...
- 分享一款自己改进的皮肤“verdant”.
- -!我总觉得我不应该这个样子了,这是个不好的习惯,面对博客,我每周或者每个月都会有审美疲劳,然后又写一个皮肤模板,不停的循环,至今都写了好多好多了,都记不清了,汗... 下面是我这今天审美疲劳写的 ...
- linux下mono,powershell安装教程
1简介 简单来说pash就是bash+powershell 2官网 https://github.com/Pash-Project/Pash 3下载fedora20---lxde桌面---32位版. ...
- ASP.NET Core "完整发布,自带运行时" 到jexus
一.阅读前须知 1.使用 jexus整合asp.net core的优点: 1)支持多站点,同一端口可以同时支持任何多的asp.net core应用程序: 2)应用程序启动.停 ...
- Jexus服务器SSL二级证书安装指南
申请获得服务器证书有三张,一张服务器证书,二张中级CA证书.在Android微信中访问Https,如果服务器只有一张CA证书,就无法访问. 获取服务器证书中级CA证书: 为保障服务器证书在客户端的兼容 ...
- Vue插件开发入门
相对组件来说,Vue 的插件开发受到的关注要少一点.但是插件的功能是十分强大的,能够完成许多 Vue 框架本身不具备的功能. 大家一般习惯直接调用现成的插件,比如官方推荐的 vue-router.vu ...
- SSH框架整合(代码加文字解释)
一.创建数据库并设置编码. A) create database oa default character set utf8. 二.MyEclipse工程 A) 在Myeclipse里创建web工程, ...
- fir.im Weekly - APP 性能监测优化 二三事
每一个成功的 App,都拥有强大的性能体验.本期 fir.im Weekly 整理了微信读书.美团外卖. 天猫.美团点评技术团队的关于性能监测优化方面策略和工具的分享,一起来看看. 微信读书 iOS ...
- ★Kali信息收集~ 1.Google Hacking + Github Hacking
一.google hacking site site:cnblogs.com 毒逆天 intitle intitle:login allintitle allintitle:index of alli ...
- Vue1.0 的技术栈
vuejs概述 Vue.js是用于构建交互式的Web界面的库.它提供了MVVM数据绑定和一个可组合的组件系统,具有简单.灵活的API. 结合node.js 可以实现前后端开发从物理上的分离.使前端负责 ...