当前位置:  技术问答>java相关

五星“急”问题之二:JFrame的互斥显示

    来源: 互联网  发布时间:2015-02-13

    本文导语:  现有JFrame1,JFrame2。JFrame1里面有Jbutton1,点击时有以下处理代码:{JFrame2.show();this.dispose();}而后在出现的JFrame2中有Jbutton2,希望点击的效果是关闭JFrame2同时打开JFrame1,但没办法对JFrame1进行操作,连返回个参数都不可以!...

现有JFrame1,JFrame2。JFrame1里面有Jbutton1,点击时有以下处理代码:{JFrame2.show();this.dispose();}而后在出现的JFrame2中有Jbutton2,希望点击的效果是关闭JFrame2同时打开JFrame1,但没办法对JFrame1进行操作,连返回个参数都不可以!这样的功能难道非得要用面板什么的来做?那太耗内存了!

|
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Visible_jframe extends JFrame 
      implements ActionListener
{
     private JButton setunVisible;
     private int flag; 
     private sonJFrame test2;
     public Visible_jframe()
     {
      Container ctp=getContentPane();
      ctp.setLayout(new FlowLayout());
      setunVisible=new JButton("setunVisible");
      ctp.add(setunVisible);
      setunVisible.addActionListener(this);
      addWindowListener(new WindowAdapter()
      {
          public void WindowListener(WindowEvent evt)
          {
              System.exit(0);
          }
      });
     
      setSize(300,300);
     
     }
     public void actionPerformed(ActionEvent evt)
     {
      if (evt.getSource()==setunVisible)
      {    
          if (flag==true)  
          {
        test2=new sonJFrame(this);
      test2.setTitle("Test2");
      test2.setVisible(true);
      this.setVisible(false);
          }else
           {
             test2.setVisible(true);
             this.setVisible(false);
           }
      }   
     }
     class sonJFrame extends JFrame
           implements ActionListener
     {
      private JFrame me;
      private JButton setVisible;
      public sonJFrame(JFrame jframes)
      {
           
           me=jframes;
           Container ctps=getContentPane();
           ctps.setLayout(new FlowLayout());
           
           setVisible=new JButton("setVisible");
           ctps.add(setVisible);
           setVisible.addActionListener(this);
           setSize(300,300);
           addWindowListener(new WindowAdapter()
           {
             public void windowClosing(WindowEvent evt)
             {
              System.exit(0);
             }
           });
      }
      public void actionPerformed(ActionEvent evt)
      {
          if (evt.getSource()==setVisible)
              me.setVisible(true);
      }
     } 
     public static void main (String args[])
     {
      Visible_jframe test=new Visible_jframe();
      test.setTitle("Visible Test");
      test.setVisible(true);
      /*
      sonJFrame test1=new sonJFrame(test);
      test1.setLocation(300,300);
      test1.setVisible(true);
      */
     }        
}

|

首先一点,用Panel来做并不存在消耗内存的问题,其实与你建立新的JFrame一样的。

其次,要想两个JFrame可以相互调用,基本一点是相互有一个对方的实例或new出一个对方的实例。



|
不好意思 上面的代碼貼錯了
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Visible_jframe extends JFrame 
                    implements ActionListener
{
     private JButton setunVisible;
     private sonJFrame test2;
     private boolean   flag=true;
     public Visible_jframe()
     {
      Container ctp=getContentPane();
      ctp.setLayout(new FlowLayout());
      setunVisible=new JButton("setunVisible");
      ctp.add(setunVisible);
      setunVisible.addActionListener(this);
      addWindowListener(new WindowAdapter()
      {
          public void WindowListener(WindowEvent evt)
          {
              System.exit(0);
          }
      });
     
      setSize(300,300);
     
     }
     public void actionPerformed(ActionEvent evt)
     {
      if (evt.getSource()==setunVisible)
      {   
          if (flag==true)
          {
            test2=new sonJFrame(this);
          test2.setTitle("Test2");
          test2.setVisible(true);
          this.setVisible(false);
          flag=false;
          }else
          {
             test2.setVisible(true);
             this.setVisible(false);
          }   
      }   
     }
     class sonJFrame extends JFrame
               implements ActionListener
     {
      private JFrame me;
      private JButton setVisible;
      public sonJFrame(JFrame jframes)
      {
           
           me=jframes;
           Container ctps=getContentPane();
           ctps.setLayout(new FlowLayout());
           
           setVisible=new JButton("setVisible");
           ctps.add(setVisible);
           setVisible.addActionListener(this);
           setSize(300,300);
           addWindowListener(new WindowAdapter()
           {
             public void windowClosing(WindowEvent evt)
             {
              System.exit(0);
             }
           });
      }
      public void actionPerformed(ActionEvent evt)
      {
          if (evt.getSource()==setVisible)
              setVisible(false);
              me.setVisible(true);
      }
     } 
     public static void main (String args[])
     {
      Visible_jframe test=new Visible_jframe();
      test.setTitle("Visible Test");
      test.setVisible(true);
     }        
}
      

|
只要把主程序的jframe 当成参数传给其他的类就可以了!

你可以用dispose()方法释放资源!

|
>>jpanel每次启动都初始化那么多的组件,好慢啊!

没道理的。JFrame启动时也要初始化全部显示的组件,其实JFrame中也有一个Panel,你的东西还是在这个Panel上。

>>我想把每一群组件都写成类,要的时候就显示,不要的时候就全部消除!
        ^^^^^^^^^
什么意思?一群组件写成一个类?它们放哪?为什么不能放在JPanel上?放在JPanel上,你只要把这个panel消除,它们也都全没了。

>>用jpanel好象程序显得特别长、可读性差,有时候连自己都搞不太明白

为什么?你应该自己定义一个myPanel extends JPanel,在这个类中写代码,与mainFrame分开来。然后在mainFrame中加入这个myPanel即可。
你可以写多个不同的myPanel,每个panel上的东西不一样,需要时在mainFrame中new出来并显示,不要时就delete掉它。这样怎么可能代码显得长呢?






    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 五星“急”问题之三:也是关于图标设置,请多指教
  • 谁能帮我找到jbuilder 7? 刚升为五星上将, 参加完毕业典礼, 顺便散分!
  • 五星“急”问题之一:java与vb互发信息,请多指教


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3