当前位置: 技术问答>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);
*/
}
}
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);
}
}
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()方法释放资源!
你可以用dispose()方法释放资源!
|
>>jpanel每次启动都初始化那么多的组件,好慢啊!
没道理的。JFrame启动时也要初始化全部显示的组件,其实JFrame中也有一个Panel,你的东西还是在这个Panel上。
>>我想把每一群组件都写成类,要的时候就显示,不要的时候就全部消除!
^^^^^^^^^
什么意思?一群组件写成一个类?它们放哪?为什么不能放在JPanel上?放在JPanel上,你只要把这个panel消除,它们也都全没了。
>>用jpanel好象程序显得特别长、可读性差,有时候连自己都搞不太明白
为什么?你应该自己定义一个myPanel extends JPanel,在这个类中写代码,与mainFrame分开来。然后在mainFrame中加入这个myPanel即可。
你可以写多个不同的myPanel,每个panel上的东西不一样,需要时在mainFrame中new出来并显示,不要时就delete掉它。这样怎么可能代码显得长呢?
没道理的。JFrame启动时也要初始化全部显示的组件,其实JFrame中也有一个Panel,你的东西还是在这个Panel上。
>>我想把每一群组件都写成类,要的时候就显示,不要的时候就全部消除!
^^^^^^^^^
什么意思?一群组件写成一个类?它们放哪?为什么不能放在JPanel上?放在JPanel上,你只要把这个panel消除,它们也都全没了。
>>用jpanel好象程序显得特别长、可读性差,有时候连自己都搞不太明白
为什么?你应该自己定义一个myPanel extends JPanel,在这个类中写代码,与mainFrame分开来。然后在mainFrame中加入这个myPanel即可。
你可以写多个不同的myPanel,每个panel上的东西不一样,需要时在mainFrame中new出来并显示,不要时就delete掉它。这样怎么可能代码显得长呢?
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。