這篇文章主要為大家展示了“java單例模式如何實(shí)現(xiàn)面板切換”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“java單例模式如何實(shí)現(xiàn)面板切換”這篇文章吧。
具體內(nèi)容如下
1、首先介紹一下什么是單例模式:
java單例模式是一種常見(jiàn)的設(shè)計(jì)模式,那么我們先看看懶漢模式:
public class Singleton_ { //設(shè)為私有方法,防止被外部類引用或?qū)嵗? private Singleton_(){ System.out.println("懶漢單例模式"); } private static Singleton_ single = null; //并對(duì)外只暴露getInstance()方法,這是獲取唯一實(shí)例方法。 public static Singleton_ getInstance(){ if(single==null) single = new Singleton_(); return single; } }
這是沒(méi)有考慮線程安全問(wèn)題的,因?yàn)樵诰€程并發(fā)的情況下,容易有多個(gè)實(shí)例,所以這是個(gè)線程不安全的模式。還有像餓漢模式這樣的:
//餓漢式單例類.在類初始化時(shí),已經(jīng)自行實(shí)例化 public class Singleton1 { private Singleton1() {} private static final Singleton1 single = new Singleton1(); //對(duì)外只暴露getInstance()方法,這是獲取唯一實(shí)例方法。 public static Singleton1 getInstance() { return single; } }
這個(gè)模式在類初始化的時(shí)候就已經(jīng)實(shí)例化了,保證了唯一一個(gè)實(shí)例,這是線程安全的。
2、簡(jiǎn)單了解了什么是單例模式后,我們來(lái)用一個(gè)具體實(shí)例看看,怎么樣實(shí)現(xiàn)在JFrame界面切換的時(shí)候可以只有一個(gè)主窗體,而不需要,不停地實(shí)例化和銷毀它。
主類繼承JFrame,所以直接實(shí)例化本類并顯示就可以了。
import javax.swing.JFrame; public class Singleton_ extends JFrame{ private static Singleton_ single = null; //對(duì)外只暴露getInstance()方法,這是獲取唯一實(shí)例方法。 public static Singleton_ getInstance(){ if(single==null) single = new Singleton_(); return single; } public static void main(String args[]){ Singleton_ singleton_ = new Singleton_();//實(shí)例化唯一窗口與 singleton_.setTitle("單例模式窗口"); singleton_.setVisible(true); } //設(shè)為私有方法,防止被外部類引用或?qū)嵗? private Singleton_(){ setBounds(100, 100, 461, 286); setContentPane(Panel_01.getInstance(this)); } }
這是一個(gè)JPanel面板類,他也是一個(gè)單例模式,返回的是一個(gè)JPanel實(shí)例。
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"); //點(diǎn)擊事件 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; } }
第二個(gè)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("返回"); //點(diǎn)擊事件 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; //對(duì)外接口 public static Panel_02 getInstance(JFrame jFrame){ panel_02 = new Panel_02(jFrame); return panel_02; } }
以上是“java單例模式如何實(shí)現(xiàn)面板切換”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
文章題目:java單例模式如何實(shí)現(xiàn)面板切換-創(chuàng)新互聯(lián)
轉(zhuǎn)載注明:http://vcdvsql.cn/article4/pghoe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動(dòng)網(wǎng)站建設(shè)、營(yíng)銷型網(wǎng)站建設(shè)、外貿(mào)建站、外貿(mào)網(wǎng)站建設(shè)、品牌網(wǎng)站制作、App設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容