2012-03-07 39 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

相关问题