博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
学习笔记-Java swing
阅读量:4289 次
发布时间:2019-05-27

本文共 5449 字,大约阅读时间需要 18 分钟。

这里写图片描述

Java swing提供了一种轻量级的组件,尽量让这些组件在各个平台上的工作方式都相同。

学生信息管理系统登录页面是由swing组件实现的,其中用到的有JFrame、JPanel、LayoutManager、JTextArea、JButton等。

JFrame

public class JFrame extends Frame implements WindowConstants, Accessible, RootPaneContainer
JFrame相当于一个容器可以承载JPanel等组件,JFrame就是页面的窗体。
常用的JFrame方法有以下:
void setSize(int width, int height):设置窗体的大小
void setVisible(boolean b):设置窗体是否可见,注意,这个函数必须在JFrame中添加上所有的组件后调用
Component add(Component comp):将JPanel、JButton等组件添加到JFrame中
void setDefaultCloseOperation(int operation):点击窗口右上方的关闭时的操作,有四种操作,如下:

  • DO_NOTHING_ON_CLOSE (不做任何操作,点击关闭时无反应)
  • HIDE_ON_CLOSE(只隐藏窗口,不关闭进程,不释放资源,这种方法也是JFrame窗口默认的方式)
  • DISPOSE_ON_CLOSE(隐藏窗体,并当最后一个窗口关闭时结束进程,释放资源,相当于dispose())
  • EXIT_ON_CLOSE(关闭窗口并结束进程,释放资源,相当于System.exit(0))

如果不点击右上角的关闭按钮,而想通过JFrame页面的一个JButton关闭JFrame并释放资源时,需要用到方法dispose();

例如:
这里写图片描述

这是一个可以进行增删改查的主页面,我想在点击删除按钮时将主界面关闭并释放资源,下面对比setVisible(false)和dispose():

这里写图片描述

这里写图片描述

明显看见dispose()可以关闭界面并释放资源。

JPanel

public class JPanel extends JComponent implements Accessible
JPanel是swing工具包中的面板容器类,可以添加到JFrame中,也可以包含JButton等组件。
JPanel默认的布局管理器是FlowLayout流式布局。
JPanel常用的方法有以下:

  • Component add(Component comp):添加其他的组件

LayoutManager

LayoutManager是布局管理器,常用的有以下几种:

  • FlowLayout:流式布局,是将组件按照从左到右从上到下的顺利排列。可以指定对齐方式以及水平和垂直距离。
  • BorderLayout:边界布局,将容器的布局分为五块:NORTH、WEST、CENTER、EAST、SOUTH,可以用setPreferredSize()方法设置每块的大小。JFrame使用边界布局,一般不直接将JButton等组件添加到边界布局中,会将组件的形状撑大。
  • GridLayout:表格布局,可以生成几行几列的表格,存放组件时按照从左到右从上到下的顺利依次将组件放到每个表格中。

ActionListener

public interface ActionListener extends EventListener
ActionListener是接收操作事件的侦听接口,比如,通过addActionListener方法将创建的ActionListener对象加到登录按钮上,当点击登录按钮时,会调用ActionListener对象的actionPerformed 方法去执行动作。

实现代码如下:

package com.company.jframe;import com.company.domain.UserInfo;import com.company.utils.FileUtil;import javax.swing.*;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.util.ArrayList;import java.util.List;public class LoginGui{
JTextField jName = new JTextField(10); JPasswordField jPassWd = new JPasswordField(10); JFrame loginJFrame = new JFrame("学生信息管理系统登录页面"); public LoginGui(){ loginJFrame.setLayout(new GridLayout(4,1)); loginJFrame.setSize(400, 300);//设置界面的大小 loginJFrame.add(initTitleJPanel()); loginJFrame.add(initUserNameJPanel()); loginJFrame.add(initPssWdJPanel()); loginJFrame.add(initButtonJPanel()); loginJFrame.setVisible(true);//设置界面为可见的 loginJFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); } private JPanel initTitleJPanel(){ //定义一个放提示信息的JPanel JPanel jPanel4up = new JPanel(new FlowLayout()); JLabel title = new JLabel("欢迎登陆!"); title.setFont(new Font("宋体",Font.BOLD,16)); jPanel4up.add(title); return jPanel4up; } private JPanel initUserNameJPanel(){ //定义一个输入用户名的JPanel JPanel userNameJPanel = new JPanel(new FlowLayout()); JLabel name = new JLabel("用户名:"); userNameJPanel.add(name); userNameJPanel.add(jName); name.setHorizontalAlignment(SwingConstants.CENTER); return userNameJPanel; } private JPanel initPssWdJPanel(){ //定义一个输入密码的JPanel JPanel jPanel4Passwd = new JPanel(new FlowLayout()); JLabel passwd = new JLabel("密 码:"); jPanel4Passwd.add(passwd); jPanel4Passwd.add(jPassWd); passwd.setHorizontalAlignment(SwingConstants.CENTER); return jPanel4Passwd; } private JPanel initButtonJPanel(){ //定义一个放Button的JPanel JPanel jPanel4Button = new JPanel(new FlowLayout()); final JButton login = new JButton("登录"); //给登录按钮添加侦听接口 login.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //获取输入框输入的用户名和密码 String userName = jName.getText(); String passWd = String.valueOf(jPassWd.getPassword()); List
userInfoList = readUserInfoFile(); //定义一个存放用户登录信息的列表 boolean userIsExist = false; //定义一个flag去标识用户是否存在 //用户名和密码放在用户信息list中,依次取出用户名和密码去判断输入的用户名和密码是否正确 for(UserInfo userInfo:userInfoList){ if(userInfo.getUserName().equals(userName)){ if (userInfo.getPassWd().equals(passWd)){ System.out.println("登录成功!"); StuInfoGui stuInfoGui = new StuInfoGui();//登录成功跳转到用户信息页面 loginJFrame.setVisible(false); }else { System.out.println("密码错误!"); } userIsExist = true; } } if(!userIsExist){ System.out.println("该用户不存在!"); } } }); //重置按钮 JButton reset = new JButton("重置"); reset.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { jName.setText(null); jPassWd.setText(null); } }); jPanel4Button.add(login); jPanel4Button.add(reset); return jPanel4Button; } public List
readUserInfoFile(){ List
userInfoList = new ArrayList
(); String userInfoStr = FileUtil.fileRead("D:\\gitSource\\student-management-system\\userlogininfo.txt"); String[] userInfoArr = userInfoStr.split(","); for (int i = 0 ;i
你可能感兴趣的文章
网站建设之域名注册和域名备案
查看>>
解决bootstrap时间输入框总被浏览器记住的记录遮挡住的问题
查看>>
git将一个分支完全覆盖另外一个分支如:dev分支代码完全覆盖某一个开发分支
查看>>
elasticsearch7.3版本环境搭建(二)可视化管理后台kibana的安装和配置
查看>>
elasticsearch7.3版本环境搭建(三)可视化管理后台kibana的汉化(设置中文界面)
查看>>
记录一次DDos攻击实战
查看>>
分享一首小诗--《致程序员》
查看>>
为什么百度只抓取了首页而不抓取我的网站的内页的原因分析
查看>>
年薪170万的阿里P8级员工征婚有感--话说阿里真有钱,这员工要求的条件真多
查看>>
又是一年桂花飘香时,祝我们伟大的祖国70年华诞更加繁荣昌盛,祝大家国庆节快乐
查看>>
谷歌浏览器chrome即将在2020年底停止支持flash,我们程序员该怎么办
查看>>
如何将数据采集到 Elasticsearch 服务
查看>>
面试官:mysql表设计要注意什么?
查看>>
一些精致小众网站收集录
查看>>
计算机科学探秘之linux发展史
查看>>
程序员每天早上早来10分钟的好处
查看>>
互联网30年,泡沫如梦,一个个泡沫和风口过后,会是什么样的结局
查看>>
升级centos 6.8 服务器的gcc
查看>>
网络案例分析之999皮炎平出鹤顶红色号的口红
查看>>
API网关在微服务架构中的应用,这一篇就够了
查看>>