问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
你好,欢迎来到懂视!登录注册
当前位置: 首页 - 正文

如何在java程序中,当点击一个按钮后,关闭当前窗口,开启一个新的窗口...

发布网友 发布时间:2022-04-23 08:30

我来回答

5个回答

热心网友 时间:2022-04-23 15:01

    首先分析需要的GUI技术

java中一般使用swing 和awt技术来实现图形界面,Swing组件较多,功能比较强大,所以这里使用Swing组件来实现。窗口使用(JFrame),按钮使用(JButton)。


    设想一个符合题目需求的场景

两个窗口关联并且跳转,最常见的场景就是登陆了。

登陆窗口,输入用户名和密码,如果成功就跳转到主窗口


    核心逻辑,跳转窗口的关键代码

    一般可以隐藏本窗口(setVisible(false);),显示新窗口来实现窗口的跳转。

但是隐藏窗口,会在后面浪费系统资源。

如果不再使用该窗口,应该彻底销毁(dispose();),释放系统资源


    代码和注释

LoginFrame 类

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

//LoginFrame 登陆窗口  功能 实现用户登陆 ,如果成功就跳转
//LoginFrame 继承于窗口类, 并实现ActionListener接口
public class LoginFrame extends JFrame implements ActionListener {
// 申明需要的组件
JButton jb1, jb2;//按钮
JTextField jtf1;//文本框
JPasswordField jpf1;//密码框

public LoginFrame() {
// 窗口属性的设置
setTitle("登陆窗");// 窗口标题
setSize(300, 180);// 窗口大小
setLocationRelativeTo(null);// 窗口居中
setDefaultCloseOperation(EXIT_ON_CLOSE);// 关闭窗口则退出虚拟机
setLayout(new FlowLayout());// 设置布局流式布局

JPanel jp = new JPanel(new GridLayout(4, 1));// 设置面板为表格布局4行1列
// 第一行
JPanel jp1 = new JPanel();
JLabel jl1 = new JLabel("账号 ");
jtf1 = new JTextField(12);
jp1.add(jl1);
jp1.add(jtf1);
jp.add(jp1);
// 第二行
JPanel jp2 = new JPanel();
JLabel jl2 = new JLabel("密码 ");
jpf1 = new JPasswordField(12);
jp2.add(jl2);
jp2.add(jpf1);
jp.add(jp2);
// 第三行
JPanel jp3 = new JPanel();
jb1 = new JButton("登陆");
jb1.addActionListener(this);// 添加动作响应器
jb2 = new JButton("重置");
jb2.addActionListener(this);// 添加动作响应器
jp3.add(jb1);
jp3.add(jb2);
jp.add(jp3);
// 第四行
JPanel jp4 = new JPanel();
JLabel jl3 = new JLabel("提示: 账号 admin 密码 123");
jl3.setForeground(Color.DARK_GRAY);
jp4.add(jl3);
jp.add(jp4);

add(jp);

}

// 动作响应
public void actionPerformed(ActionEvent e) {
String cmd = e.getActionCommand();// 根据动作命令,来进行分别处理
if (cmd.equals("登陆")) {
String id = jtf1.getText();// 取得用户名
String key = new String(jpf1.getPassword());// 取得密码
if (id.equals("admin") && key.equals("123")) {// 判断是否登录成功
// 如果登录成功
setVisible(false);// 本窗口隐藏,
new MainFrame(id).setVisible(true);// 新窗口显示
dispose();//本窗口销毁,释放内存资源
} else {
//如果登录失败  弹出提示
JOptionPane.showMessageDialog(this, "用户名或者密码错误.", "通知", JOptionPane.ERROR_MESSAGE);
clearText();//清空文本框 密码框的输入
}
} else if (cmd.equals("重置")) {
clearText();
}

}

private void clearText() {//清空文本框, 密码框的输入
jtf1.setText("");
jpf1.setText("");
}

//main方法, 程序的入口
public static void main(String[] args) {
new LoginFrame().setVisible(true);//创建登录窗口,并可见
}

}

MainFrame类

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

public class MainFrame extends JFrame {

public MainFrame(String name) {
setTitle("主窗口");//标题
setSize(300, 260);//大小
setLocationRelativeTo(null);//居中
setDefaultCloseOperation(EXIT_ON_CLOSE);
JPanel jp = new JPanel();
JLabel jl1 = new JLabel("欢迎");
JLabel jl2 = new JLabel(name);
jl2.setForeground(Color.BLUE);//设置文本颜色
JLabel jl3 = new JLabel("使用系统.");
jp.add(jl1);
jp.add(jl2);
jp.add(jl3);
add(jp, BorderLayout.NORTH);
JTextArea jta = new JTextArea();
jta.setLineWrap(true);
jta.append("消息提示");
jta.append(" 消息!通知~!");
JScrollPane jsp = new JScrollPane(jta, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
add(jsp);
JPanel jp2 = new JPanel();
JButton jb = new JButton("退出");
jb.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0);//退出
}
});
jp2.add(jb);
add(jp2,BorderLayout.SOUTH);
}

}


    运行效果图

热心网友 时间:2022-04-23 16:19

JButton btn=new JButton(new AbstractAction("关闭并打开") {      @Override   public void actionPerformed(ActionEvent e) {      oldFrame.dispose();// 关闭并销毁,无需销毁可采用oldFrame.setVisible(false);      newFrame.setVisible(true);// 打开新窗口   }});

import javax.swing.*;


import java.awt.Rectangle;

import java.awt.event.*;


public class Swing7 extends JFrame implements ActionListener {

JButton jb = new JButton();

public Swing7() {

this.setTitle("Java——");

jb.setText("确定");

jb.setMnemonic('a');

this.add(jb);

this.setBounds(200, 300, 250, 300);

ctionListener就是Swing7实例。
}

public void actionPerformed(ActionEvent e) {// 实现ActionListener接口的actionPerformed接口。

JFrame frame = new JFrame("新窗口");//构造一个新的JFrame,作为新窗口。

frame.setBounds(// 让新窗口与Swing7窗口示例错开50像素。

new Rectangle(

(int) this.getBounds().getX() + 50,

(int) this.getBounds().getY() + 50,

(int) this.getBounds().getWidth(),

(int) this.getBounds().getHeight()
)
);

JLabel jl = new JLabel();// 注意类名别写错了。

frame.getContentPane().add(jl);

jl.setText("这是新窗口");

jl.setVerticalAlignment(JLabel.CENTER);
jl.setHorizontalAlignment(JLabel.CENTER);// 注意方法名别写错了。
frame.setVisible(true);
}

public static void main(String args[]) {
Swing7 s = new Swing7();
}
}

热心网友 时间:2022-04-23 17:54

当前窗口.dispose(),然后new 新窗口即可

热心网友 时间:2022-04-23 19:45

package com.iflytek.gui;
import java.awt.Button;
import java.awt.LayoutManager;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
public class chuangkou {

private static final LayoutManager GridLayout = null;
public static void main(String[] args) {
final JFrame fr =new JFrame("窗口1");
fr.setLayout(GridLayout);
fr.setBounds(100, 180, 400, 400);
Button b = new Button("登录");
b.setBounds(80, 80, 80, 80);
fr.add(b);
fr.setVisible(true);
fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

b.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
JFrame jf = new JFrame("窗口2");
jf.setSize(400, 400);
jf.setDefaultCloseOperation(jf.EXIT_ON_CLOSE);
fr.dispose();
jf.setVisible(true);
}
});
}
}

热心网友 时间:2022-04-23 21:53

根据提示操作追问??

不懂大神

声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
如何评价动画女恶魔人 如何评价动画女恶魔人? 途观胎压监测在哪? 勤劳一生什么生肖 一生劳碌一生享最准的生肖 勤劳一生是什么生肖 勤劳一生,终会得奖,天道酬勤作栋梁指是什么生肖,词典梳理落实 温州有哪些性价比高的面馆推荐? 护士执业资格证的照片怎么审核成功 二33乐园怎么下载? java中一个程序怎么关闭另一个程序打开的界面 如何用java关闭当前正在运行的cmd java swing怎么实现关闭一个窗口时关闭此窗口里的已经打开的窗口 我用java写的控制台程序,如何关闭当前程序。 JAVA中怎么关闭一个窗口 java中关闭窗口的方法 java 用代码如何关闭系统正在运行的excel文件 java中文件打开和关闭的问题 java如何关闭当前窗口打开新的窗口 如何关闭和打开JAVA 如何把魔芋烧得比较入味,无腥味 java 怎样关闭已打开的串口 怎样做魔芋烧肥肠最好吃 魔芋烧肉怎么做 超简单烧冻魔芋的做法步骤图,怎么做好吃 烧烤魔芋的做法,烧烤魔芋怎么做好吃,烧烤魔芋 魔芋烧肉的做法大全 魔芋烧肉怎么烧 怎么煮魔芋? 魔芋可以怎么烧? java 输入输出流抛出后怎么关闭? 低筋面粉能做饼皮什么的吗?批萨皮能做吗?是不是要加酵母啊 JAVA如何关闭或者打开一个指定的windows进程 如何取消Java已被阻止 昨晚梦到了好几只乌龟,是什么意思? java如何关闭某JFrame窗口,而不是退出整个程序! 低筋面粉可以做包子吗 做梦梦到乌龟,好几只的样子,是什么意思啊?求解╮(╯▽╰)╭ java Scanner 方法怎么结束输入 梦见身体里面全是乌龟? 十一月的时令蔬菜有哪些 梦见河里有好多乌龟是什么意思?大的小的都有,我还下去捉了拿回家 11月的菜市场有什么好吃的? 一年中的时令蔬菜图表? 梦见有好几一个乌龟,是什么意思啊? 适合1一12月种的蔬菜有哪些? 四季的时令蔬菜是什么 一年当季蔬菜有那些? USB车载MP3是怎样的东西? 车载u盘怎么用步骤?
  • 焦点

最新推荐

猜你喜欢

热门推荐