2012-03-07 38 views
2

我創建了兩個框架,我的主框架是主頁和第二個是Selectie 在家裏有一個按鈕,打開框架選擇,但我想當我點擊這個按鈕主要框架家將消失,只有選擇將顯示。該按鈕香港專業教育學院的代碼使一個其他包,我不希望它在同一個班作爲我的主(家)的首頁如何關閉主框架,當打開新的

代碼:

package View; 

import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.Container; 
import java.awt.Dimension; 
import java.awt.Toolkit; 
import java.awt.event.ActionListener; 
import java.io.File; 


import javax.swing.Icon; 
import javax.swing.ImageIcon; 
import javax.swing.JButton; 
import javax.swing.JDialog; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 

import javax.swing.JPanel; 

import Controller.HomeController; 


import music.PlaySound; 

public class Home extends JFrame { 

    private JLabel label, label1, label2; 
    private JPanel panel; 
    private JButton logo, logo1, logo2, logo3, logo4, logo5, selectie; 
    private Container window = getContentPane(); 
    private HomeController Controller; 

    public Home(){ 
     initGUI(); 
     Controller = new HomeController(); 
    } 
    public void addHomeListener(ActionListener a){ 
     selectie.addActionListener(a); 
    } 
    public void initGUI(){ 

     setLayout(null); 
     setTitle(""); 
     setPreferredSize(new Dimension(800,600)); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     label = new JLabel();  
     label.setBounds(0, 0, 266, 800); 
     label.setBackground(Color.WHITE); 
     label.setOpaque(true); 
     window.add(label); 

     label1 = new JLabel(); 
     label1.setBounds(267, 0, 266, 800); 
     label1.setBackground(Color.RED); 
     label1.setOpaque(true); 
     window.add(label1); 

     label2 = new JLabel(); 
     label2.setBounds(533, 0, 266, 800); 
     label2.setBackground(Color.WHITE); 
     label2.setOpaque(true); 
     window.add(label2); 

     logo = new JButton(new ImageIcon("../Ajax/src/img/logotje.gif")); 
     logo.setBorderPainted(false); 
     logo.setBounds(40, 150, 188, 188); 
     label1.add(logo); 

     logo1 = new JButton(new ImageIcon("../Ajax/src/img/Ster.png")); 
     logo1.setBorderPainted(false); 
     logo1.setBounds(10, 50, 82, 82); 
     label1.add(logo1); 

     logo2 = new JButton(new ImageIcon("../Ajax/src/img/Ster.png")); 
     logo2.setBorderPainted(false); 
     logo2.setBounds(92, 20, 82, 82); 
     label1.add(logo2); 

     logo3 = new JButton(new ImageIcon("../Ajax/src/img/Ster.png")); 
     logo3.setBorderPainted(false); 
     logo3.setBounds(174, 50, 82, 82); 
     label1.add(logo3); 

     logo4 = new JButton(new ImageIcon("../Ajax/src/img/shirt.png")); 
     logo4.setBorderPainted(false); 
     logo4.setBounds(50, 50, 135, 182); 
     label.add(logo4); 

     logo5 = new JButton(new ImageIcon("../Ajax/src/img/uitshirt.png")); 
     logo5.setBorderPainted(false); 
     logo5.setBounds(65, 50, 138, 190); 
     label2.add(logo5); 

     selectie = new JButton("Selectie"); 
     selectie.setBounds(60, 500, 99, 25); 
     selectie.setActionCommand("selectie"); 
     label.add(selectie); 

     pack(); 

     addHomeListener(new HomeController()); 
    } 

} 

從按鈕代碼:

package Controller; 

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import View.Home; 
import View.Selectie; 

public class HomeController implements ActionListener { 

    public void actionPerformed (ActionEvent e){ 
      Selectie selectie = new Selectie(); 
      selectie.setVisible(true); 
    } 
} 
+0

可能的重複:[搜索結果](http://stackoverflow.com/search?q=How+to+close + main + frame + when + open + new + one) – 2012-03-07 14:09:08

+2

與您的問題無關:永遠不會使用手動定位和尺寸組件,而是查找並使用適當的LayoutManager來實現所需的佈局和調整行爲 – kleopatra 2012-03-07 14:43:27

回答

2

請不要給予有效注意什麼@kleopatra和@mKorbel,不得不說,他們是在指向非常正確爲了讓事情變得簡單,

在這裏,我又增加了在代碼中的一些評論,也檢查了這一點:

import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.Container; 
import java.awt.Dimension; 
import java.awt.Toolkit; 
import java.awt.event.ActionListener; 
import java.io.File; 

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 


import javax.swing.Icon; 
import javax.swing.ImageIcon; 
import javax.swing.JButton; 
import javax.swing.JDialog; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 

import javax.swing.JPanel; 

//import Controller.HomeController; 


//import music.PlaySound; 

public class Home extends JFrame { 

    private JLabel label, label1, label2; 
    private JPanel panel; 
    private JButton logo, logo1, logo2, logo3, logo4, logo5, selectie; 
    private Container window = getContentPane(); 
    private HomeController Controller; 

    public Home(){ 
     initGUI(); 
    } 
    public void addHomeListener(ActionListener a){ 
     selectie.addActionListener(a); 
    } 
    public void initGUI(){ 

     setLayout(null); 
     setTitle(""); 
     setPreferredSize(new Dimension(800,600)); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     label = new JLabel();  
     label.setBounds(0, 0, 266, 800); 
     label.setBackground(Color.WHITE); 
     label.setOpaque(true); 
     window.add(label); 

     label1 = new JLabel(); 
     label1.setBounds(267, 0, 266, 800); 
     label1.setBackground(Color.RED); 
     label1.setOpaque(true); 
     window.add(label1); 

     label2 = new JLabel(); 
     label2.setBounds(533, 0, 266, 800); 
     label2.setBackground(Color.WHITE); 
     label2.setOpaque(true); 
     window.add(label2); 

     logo = new JButton(new ImageIcon("../Ajax/src/img/logotje.gif")); 
     logo.setBorderPainted(false); 
     logo.setBounds(40, 150, 188, 188); 
     label1.add(logo); 

     logo1 = new JButton(new ImageIcon("../Ajax/src/img/Ster.png")); 
     logo1.setBorderPainted(false); 
     logo1.setBounds(10, 50, 82, 82); 
     label1.add(logo1); 

     logo2 = new JButton(new ImageIcon("../Ajax/src/img/Ster.png")); 
     logo2.setBorderPainted(false); 
     logo2.setBounds(92, 20, 82, 82); 
     label1.add(logo2); 

     logo3 = new JButton(new ImageIcon("../Ajax/src/img/Ster.png")); 
     logo3.setBorderPainted(false); 
     logo3.setBounds(174, 50, 82, 82); 
     label1.add(logo3); 

     logo4 = new JButton(new ImageIcon("../Ajax/src/img/shirt.png")); 
     logo4.setBorderPainted(false); 
     logo4.setBounds(50, 50, 135, 182); 
     label.add(logo4); 

     logo5 = new JButton(new ImageIcon("../Ajax/src/img/uitshirt.png")); 
     logo5.setBorderPainted(false); 
     logo5.setBounds(65, 50, 138, 190); 
     label2.add(logo5); 

     selectie = new JButton("Selectie"); 
     selectie.setBounds(60, 500, 99, 25); 
     selectie.setActionCommand("selectie"); 
     label.add(selectie); 

     pack(); 

     /* 
     * You are making a new object again, 
     * when you already had declared it as 
     * an instance Variable. So I used the 
     * one declared as instance variable.. 
     * To this we will send the object of Home 
     * class, means the object of this class.. 
     * And as we know that object of the 
     * class we are in is by default known 
     * as this, so passing this to HomeController class. 
     */ 
     Controller = new HomeController(this); 
     addHomeListener(Controller); 

     setVisible(true); 
    } 

    public static void main(String... args) 
    { 
     javax.swing.SwingUtilities.invokeLater(new Runnable() 
     { 
      public void run() 
      { 
       new Home(); 
      } 
     }); 
    } 
} 

class HomeController implements ActionListener { 

    /* 
    * Here we declared a Home class's variable, 
    * that we will use to dispose that JFrame. 
    */ 
    private Home home; 

    public HomeController(Home home) 
    { 
     this.home = home; 
    } 

    public void actionPerformed (ActionEvent e){ 

      home.dispose(); 
      Selectie selectie = new Selectie(); 
      selectie.setVisible(true); 
    } 
} 

class Selectie extends JFrame 
{ 
    public Selectie() 
    { 
     initGUI(); 
    } 

    public void initGUI() 
    { 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     setLocationByPlatform(true); 

     setSize(300, 300); 
    } 
} 
+0

+1但I如果有'setSize()',簡單地將容器佈置兩次 – mKorbel 2012-03-07 17:15:46

+0

@mKorbel:Nah,實際上OP沒有提供Selectie類,所以我做了一個虛構的Selectie類,因此只是在scree上展示它n我使用'setSize()','pack()'仍然存在於Home類中。 – 2012-03-07 17:22:46

2

我建議使用CardLayout,最簡單,非常舒適的(+1 SSCCE)在這裏你的代碼發佈

從未創建,re_create一堆另一JFrames,只有在你已經得到了非常重要的原因的情況下,然後使用JDialog與父母到JFrame

相關問題