java怎么在一个类里关闭另一个类的窗口

GDswag 2020-06-12 12:13:23
求助!我写了一个java sql的登录注册界面,一个类写登录页面,另一个类里监听,但是监听完之后怎么在这个类里关闭那个登录的界面,它们不在一个类里没法调用啊。
就是登录界面里写了JFrame j=new JFrame(),但是在下一个类里没法调用这个j,请问该如何关闭
...全文
758 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
正等正觉* 2020-06-13
  • 打赏
  • 举报
回复
引用 7 楼 GDswag 的回复:
[quote=引用 4 楼 战老师课堂 的回复:]
其实要达到你所说的GUI窗口控制并不难,无论你程序中有几个类,都可以根据业务需要而将它们进行相互的关联,从而达到我们的业务需求目的。
 
       从你简单的叙述可以知道你的窗口是直接在某个类(比如A)中直接创建了一个JFream 框架对象充当登录窗口,而另外一个类组件(比如B)实现对登录的监听动作功能。实际你在调用启动方法而现实显示登录窗口后,用户输入完信息必然要调用B类的监听登录方法,如果想在B类中控制你创建的JFream实例(也就是登录窗口),只要通过执行调用B类的监听登录方法时作为参数传递JFream对象就可以了。
在登录成功后就可以在监听B类中操作JFream对象从而关闭它,当然如何你不想在调用登录方法中作为参数,就在调用登录方法前将JFream对象赋值给B监听对象的属性(前提是B类中应有个JFream成员属性,也就是登录窗口),推荐使用后面的方式。

请问怎么将jframe对象赋值给监听类啊[/quote]package com.demo.win;

import java.awt.HeadlessException;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JButton;
import javax.swing.JFrame;

import com.demo.User;
import com.demo.UserLoginListener;
/**
* 登录窗口,此类继承JFrame方便使用框架方法功能亦可定制自定方法
* 此窗口省略创建若干GUI组件
* @author java_
*
*/
public class LoginWindows extends JFrame {

private User user; // 登录用户默认为null

private JButton loginButton; // 登录按钮,监听此按钮点击事件处理用户提交登录信息

private LoginWindows self; // 当窗口自己
public User getUser() {
return user;
}

public void setUser(User user) {
this.user = user;
}

public JButton getLoginButton() {
return loginButton;
}

public void setLoginButtion(JButton loginButton) {
this.loginButton = loginButton;
}

public LoginWindows() throws HeadlessException {
super();
init(); // 调用方法对窗口进行初始化
}

//初始化方法
private void init() {
self = this;
this.setVisible(true); // 设置窗口为可见
this.setBounds(200, 150, 800, 650);
this.setLayout(null);
loginButton = new JButton("请登录");
loginButton.setBounds(150, 400, 150, 30);
this.add(loginButton);

/* 添加登录按钮监听动作*/
loginButton.addMouseListener(new LoginButtonListener());

this.validate(); // 验证
}
/* 利用内部类实现登录监听处理*/
class LoginButtonListener implements MouseListener{

@Override
public void mouseClicked(MouseEvent e) {

if(e.getButton() == 1) {// 如果是点击鼠标左键
String name = "admin"; // 实际应从文本框获取用户填写登录名
String pwd = "1234564"; // 同name操作
// 创建UserLoginListener 并传递当前窗口对象引用
UserLoginListener listener = new UserLoginListener(self);
user = listener.loginListening(pwd, pwd);
if(user == null) {// 登录失败
// 显示提示信息及相关其他处理代码
System.out.println("登录失败");
}else
System.out.println("登录成功");
}
}

@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub

}

@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub

}

@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated meth
正等正觉* 2020-06-13
  • 打赏
  • 举报
回复
引用 7 楼 GDswag 的回复:
[quote=引用 4 楼 战老师课堂 的回复:]
其实要达到你所说的GUI窗口控制并不难,无论你程序中有几个类,都可以根据业务需要而将它们进行相互的关联,从而达到我们的业务需求目的。
 
       从你简单的叙述可以知道你的窗口是直接在某个类(比如A)中直接创建了一个JFream 框架对象充当登录窗口,而另外一个类组件(比如B)实现对登录的监听动作功能。实际你在调用启动方法而现实显示登录窗口后,用户输入完信息必然要调用B类的监听登录方法,如果想在B类中控制你创建的JFream实例(也就是登录窗口),只要通过执行调用B类的监听登录方法时作为参数传递JFream对象就可以了。
在登录成功后就可以在监听B类中操作JFream对象从而关闭它,当然如何你不想在调用登录方法中作为参数,就在调用登录方法前将JFream对象赋值给B监听对象的属性(前提是B类中应有个JFream成员属性,也就是登录窗口),推荐使用后面的方式。

请问怎么将jframe对象赋值给监听类啊[/quote]package com.demo;

import javax.swing.JFrame;
/**
* 登录监听简单实现示例,不考虑任何多线程
* @author java_
*
*/
public class UserLoginListener {

private JFrame loginWin; // 登录窗口JFrame组件

public User loginListening(String name,String password) {

boolean result = login(name,password);
if(result) {// 登录成功

User user = new User();
user.setName(name);
user.setPassword(password);
/*关闭登录窗口(此处并未释放窗口,只是隐藏,合适时机可重新显示)*/
loginWin.setVisible(false);
return user; // 返回登录用户(如果登录窗口组件需要此对象)
}
return null; // 登录失败,
}
private boolean login(String name,String password) {

/* 验证登录实现逻辑 */
return false; //
}

public UserLoginListener() {

}
public UserLoginListener(JFrame loginWin) {

this.loginWin = loginWin;
}
public void setLoginWin(JFrame loginWin) {
this.loginWin = loginWin;
}
}
正等正觉* 2020-06-13
  • 打赏
  • 举报
回复
引用 7 楼 GDswag 的回复:
[quote=引用 4 楼 战老师课堂 的回复:]
其实要达到你所说的GUI窗口控制并不难,无论你程序中有几个类,都可以根据业务需要而将它们进行相互的关联,从而达到我们的业务需求目的。
 
       从你简单的叙述可以知道你的窗口是直接在某个类(比如A)中直接创建了一个JFream 框架对象充当登录窗口,而另外一个类组件(比如B)实现对登录的监听动作功能。实际你在调用启动方法而现实显示登录窗口后,用户输入完信息必然要调用B类的监听登录方法,如果想在B类中控制你创建的JFream实例(也就是登录窗口),只要通过执行调用B类的监听登录方法时作为参数传递JFream对象就可以了。
在登录成功后就可以在监听B类中操作JFream对象从而关闭它,当然如何你不想在调用登录方法中作为参数,就在调用登录方法前将JFream对象赋值给B监听对象的属性(前提是B类中应有个JFream成员属性,也就是登录窗口),推荐使用后面的方式。

请问怎么将jframe对象赋值给监听类啊[/quote]package com.demo;
/**
* 用户组件(如果需要)
* @author java_
*
*/
public class User {

private String name;
private String password;

public void setName(String name) {
this.name = name;
}

public void setPassword(String password) {
this.password = password;

}

public String getName() {
return name;
}

public String getPassword() {
return password;
}

}
GDswag 2020-06-13
  • 打赏
  • 举报
回复
引用 2 楼 tianfang 的回复:
为什么用监听的去关闭,登录处理后,直接关闭就是了

非要外部关闭,需要写消息接口,外部类发送消息,让窗口自己执行关闭

我是想写登录成功之后自动关闭登录窗口然后跳转到其他页面,不然那个登录窗口就一直在那,请问接口应该怎么写啊
GDswag 2020-06-13
  • 打赏
  • 举报
回复
引用 4 楼 战老师课堂 的回复:
其实要达到你所说的GUI窗口控制并不难,无论你程序中有几个类,都可以根据业务需要而将它们进行相互的关联,从而达到我们的业务需求目的。
 
       从你简单的叙述可以知道你的窗口是直接在某个类(比如A)中直接创建了一个JFream 框架对象充当登录窗口,而另外一个类组件(比如B)实现对登录的监听动作功能。实际你在调用启动方法而现实显示登录窗口后,用户输入完信息必然要调用B类的监听登录方法,如果想在B类中控制你创建的JFream实例(也就是登录窗口),只要通过执行调用B类的监听登录方法时作为参数传递JFream对象就可以了。
在登录成功后就可以在监听B类中操作JFream对象从而关闭它,当然如何你不想在调用登录方法中作为参数,就在调用登录方法前将JFream对象赋值给B监听对象的属性(前提是B类中应有个JFream成员属性,也就是登录窗口),推荐使用后面的方式。

请问怎么将jframe对象赋值给监听类啊
GDswag 2020-06-13
  • 打赏
  • 举报
回复
引用 1 楼 qybao 的回复:
把j也传给监听类

具体要怎么传啊
tianfang 2020-06-12
  • 打赏
  • 举报
回复
为什么用监听的去关闭,登录处理后,直接关闭就是了 非要外部关闭,需要写消息接口,外部类发送消息,让窗口自己执行关闭
qybao 2020-06-12
  • 打赏
  • 举报
回复
把j也传给监听类
正等正觉* 2020-06-12
  • 打赏
  • 举报
回复
补充一下,为了更加方便操作,建议你创建JFream 登录窗口的类继承JFream,虽然有些小耦合性,但是更容易编写程序
正等正觉* 2020-06-12
  • 打赏
  • 举报
回复
其实要达到你所说的GUI窗口控制并不难,无论你程序中有几个类,都可以根据业务需要而将它们进行相互的关联,从而达到我们的业务需求目的。
 
       从你简单的叙述可以知道你的窗口是直接在某个类(比如A)中直接创建了一个JFream 框架对象充当登录窗口,而另外一个类组件(比如B)实现对登录的监听动作功能。实际你在调用启动方法而现实显示登录窗口后,用户输入完信息必然要调用B类的监听登录方法,如果想在B类中控制你创建的JFream实例(也就是登录窗口),只要通过执行调用B类的监听登录方法时作为参数传递JFream对象就可以了。
在登录成功后就可以在监听B类中操作JFream对象从而关闭它,当然如何你不想在调用登录方法中作为参数,就在调用登录方法前将JFream对象赋值给B监听对象的属性(前提是B类中应有个JFream成员属性,也就是登录窗口),推荐使用后面的方式。
qq_45747681 2020-06-12
  • 打赏
  • 举报
回复
用dispose()方法关闭当前窗口

62,625

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧