比如说我定义了一个类
public class gui
{
gui1();//创建窗口2的函数
gui2();//创建窗口2的函数
}
窗口1有一个按钮button我要点击这个按钮,然后窗口1关闭,窗口2关闭
我现在对button按钮添加一个ActionListener
button.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){gui2();}});现在出现的问题是窗口1(gui1)与窗口2(gui2)的界面重叠慌乱button.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){dispose();gui2();}});
这样就会窗口1关闭窗口2出不来
public class gui
{
gui1();//创建窗口2的函数
gui2();//创建窗口2的函数
}
窗口1有一个按钮button我要点击这个按钮,然后窗口1关闭,窗口2关闭
我现在对button按钮添加一个ActionListener
button.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){gui2();}});现在出现的问题是窗口1(gui1)与窗口2(gui2)的界面重叠慌乱button.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){dispose();gui2();}});
这样就会窗口1关闭窗口2出不来
import java.awt.*;
import java.awt.event.*;public class CheShi extends JFrame //implements ActionListener
{
public CheShi()
{
initFirstIn();
setVisible(true);
setLocation(300,300);
setSize(450,250);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void initFirstIn()
{
setTitle("登录");
setLayout(new GridBagLayout());//网格布局
JButton bLogin=new JButton("登录");
JButton bBaseInfo=new JButton("基本信息");
JButton bAttendInfo=new JButton("出勤信息");
JButton bTransferInfo=new JButton("调动信息");
JButton bSure=new JButton("确定");
JButton bCancel=new JButton("取消");
JLabel lAccount=new JLabel("帐号");
JLabel lPassword=new JLabel("密码");
JTextField tAccount=new JTextField(8);
JPasswordField tPassword=new JPasswordField(8);
setLayout(new GridBagLayout());
Insets insets =new Insets(2, 2, 2, 2);
// gridx, gridy, gridwidth, gridheight, weightx, weighty,
// //指定组件应置于其显示区域中anchor, 组件完全填满其显示区域fill, //填塞 insets, ipadx, ipady
add(bLogin,new GridBagConstraints (0,0,1,1,100,100,GridBagConstraints.CENTER,GridBagConstraints.BOTH,insets,0,0));
add(bBaseInfo,new GridBagConstraints (0,1,1,1,0,100, GridBagConstraints.CENTER,GridBagConstraints.BOTH,insets,0,0));
add(bAttendInfo,new GridBagConstraints (0,2,1,1,0,100, GridBagConstraints.CENTER,GridBagConstraints.BOTH,insets,0,0));
add(bTransferInfo,new GridBagConstraints (0,3,1,1,0,100, GridBagConstraints.CENTER,GridBagConstraints.BOTH,insets,0,0));
add(lAccount,new GridBagConstraints (1,0,1,1,100,0, GridBagConstraints.EAST,GridBagConstraints.NONE,insets,5,5));
add(lPassword,new GridBagConstraints(1,1,1,1,0,0, GridBagConstraints.EAST,GridBagConstraints.NONE,insets,5,5));
add(tAccount,new GridBagConstraints (2,0,1,1,100,0, GridBagConstraints.WEST,GridBagConstraints.NONE,insets,5,5));
add(tPassword,new GridBagConstraints(2,1,1,1,0,0, GridBagConstraints.WEST,GridBagConstraints.NONE,insets,5,5));
add(bSure,new GridBagConstraints (1,3,1,1,0,0, GridBagConstraints.EAST,GridBagConstraints.NONE,insets,5,5));
add(bCancel,new GridBagConstraints (2,3,1,1,0,0, GridBagConstraints.CENTER,GridBagConstraints.NONE,insets,5,5));
}
public void initLogin()
{
setTitle("登录成功");
setLayout(new GridBagLayout());//网格布局
JButton bLogin=new JButton("登录");
JButton bBaseInfo=new JButton("基本信息");
JButton bAttendInfo=new JButton("出勤信息");
JButton bTransferInfo=new JButton("调动信息");
JButton bModefyAccount=new JButton("修改帐号");
JButton bCancel=new JButton("退出");
JLabel jlabel=new JLabel("登录成功");
bCancel.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){System.exit(0);;initFirstIn();}});
jlabel.setFont(new Font("Serif",Font.PLAIN,25));//要设置字体
setLayout(new GridBagLayout());
Insets insets =new Insets(2, 2, 2, 2);
// gridx, gridy, gridwidth, gridheight, weightx, weighty,
// //指定组件应置于其显示区域中anchor, 组件完全填满其显示区域fill, //填塞 insets, ipadx, ipady
add(bLogin,new GridBagConstraints (0,0,1,1,100,100,GridBagConstraints.WEST,GridBagConstraints.NONE,insets,65,18));
add(bBaseInfo,new GridBagConstraints (0,1,1,1,0,100, GridBagConstraints.WEST,GridBagConstraints.NONE,insets,40,18));
add(bAttendInfo,new GridBagConstraints (0,2,1,1,0,100, GridBagConstraints.WEST,GridBagConstraints.NONE,insets,40,18));
add(bTransferInfo,new GridBagConstraints(0,3,1,1,0,100, GridBagConstraints.WEST,GridBagConstraints.NONE,insets,40,18));
add(jlabel,new GridBagConstraints (1,1,2,1,0,100, GridBagConstraints.CENTER,GridBagConstraints.NONE,insets,0,10));
add(bModefyAccount,new GridBagConstraints (1,3,1,1,0,100, GridBagConstraints.EAST,GridBagConstraints.NONE,insets,0,5));
add(bCancel,new GridBagConstraints (2,3,1,1,100,0, GridBagConstraints.WEST,GridBagConstraints.NONE,insets,20,5));
}
public static void main(String args[])
{
CheShi gu=new CheShi();
}
}
bLogin.addActionListener(new ActionListener(){ @Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
self.dispose();
JFrame frame = new JFrame();
//frame.setContentPane(test1);
frame.setPreferredSize(new Dimension(400,400));
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
});
下面说说解决办法:
先增加引向自身的引用:
private CheShi self = this;
在initFirstIn函数中为bSure增加监听器:JButton bSure=new JButton("ok");
bSure.addActionListener(new ActionListener(){ @Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
self.getContentPane().removeAll();
self.repaint();
initLogin();
}
});
然后就实现你说的效果了。
this.validate();