JFrame


package com.competition;

import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import org.apache.commons.lang3.StringUtils;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPasswordField;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.Timer;
import javax.swing.WindowConstants;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.List;
import java.util.Map;

/**
 * 

* ApplicationSoftware *

* Description: 应用软件题 * 1、建立数据库,并在数据库中建立persons表,主要字段有姓名、密码、性别、年龄、专业。记录条数为10条。 * 2、软件具有登录窗口,登录窗口输入用户的姓名和密码,三次输入错误后软件自动退出,输入正确则进入主窗口。 * 3、主窗口用表格全屏显示每条记录中除密码外的其它内容,按年龄升序排列。 * 4、主窗口具有标题栏、菜单栏、工具栏、状态栏,标题显示“数据库查询软件”,菜单栏设计3个子菜单项,分别为退出、最小化、最大化。状态栏显示当前日期和时间、登录的用户名。 * 5、点击退出后,提醒用户是否确实退出,如果选择是则直接关闭退出,否则返回主界面。 * * @date 2019-10-12 下午 03:35 */ public class ApplicationSoftware { private static Map map = Maps.newHashMap(); public static void main(String[] args) { fun2(); } private static void fun1() { // JFrame jf = new JFrame(); JFrame jf = new JFrame("这里是标题");// 窗口标题 Container container = jf.getContentPane();// 创建容器 JLabel jl = new JLabel("这里是展示的内容"); // 使标签上的文字居中 jl.setHorizontalAlignment(SwingConstants.CENTER); Font font = new Font("TimesRoman", Font.ITALIC, 25); jl.setFont(font); container.add(jl);// 添加上面的组件,不添加就显示不到 container.setBackground(Color.PINK); jf.setVisible(true);// 窗口可视 jf.setSize(800, 400);// 窗口大小 // DO_NOTHING_ON_CLOSE 的意思是关不掉,哈哈,可以捉弄下小白 // jf.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE); jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);// 可以关掉 } private static void fun2() { JFrame jf = new JFrame();// 新建一个窗口 jf.setSize(800, 600);// 设置大小 jf.setTitle("数据库查询软件");// 设置标题 // jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jf.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);// 设置关闭按钮动作 // 一个窗口的面板分为三层 根面板和中间面板 以及内容面板, 组件全部放在内容 面板上面 // 获取到内容面板 Container con = jf.getContentPane();// 得到了内容面板 con.setLayout(null); // 设置组件内容 // 设置标签组件 JLabel jl = new JLabel(); jl.setText("用户名:");// 设置标签的名称 jl.setForeground(Color.blue);//设置字体颜色 jl.setSize(80, 30);// 设置标签的大小 jl.setLocation(180, 200);// 设置标签存放位置 con.add(jl);// 把jl组件放在内容面板上 // 创建用户名输入文本框 JTextField username = new JTextField();// 创建文本框 username.setSize(100, 30); username.setLocation(260, 200);// 设置位置 con.add(username); // 创建密码标签 JLabel jl1 = new JLabel(); jl1.setText("密 码:"); jl1.setForeground(Color.blue); jl1.setSize(80, 30); jl1.setLocation(180, 250);// 设置密码存放位置 con.add(jl1); // 创建密码输入文本框 JPasswordField passworld = new JPasswordField(); passworld.setSize(100, 30); passworld.setLocation(260, 250); con.add(passworld); //登录按钮 JButton ok = new JButton("登录"); Font f = new Font("华文行楷", Font.BOLD, 20); ok.setFont(f); ok.setSize(150, 40); ok.setLocation(150, 420); con.add(ok); // 取消按钮 JButton cancel = new JButton("取消"); cancel.setFont(f); cancel.setSize(150, 40); cancel.setLocation(420, 420); con.add(cancel); // 底部状态栏 con.setLayout(new BorderLayout()); ClockText clockText = new ClockText(null); con.add(clockText, BorderLayout.SOUTH); // 顶部工具栏 JMenuBar menuBar = new JMenuBar(); // 菜单操作 //创建并添加各菜单,注意:菜单的快捷键是同时按下Alt键和字母键,方法setMnemonic('F')是设置快捷键为Alt +F JMenu menuFile = new JMenu("文件(F)"); JMenu menuEdit = new JMenu("编辑(E)"); JMenu menuView = new JMenu("查看(V)"); menuFile.setMnemonic('F'); menuEdit.setMnemonic('E'); menuView.setMnemonic('V'); JMenuItem open = new JMenu("打开"); JMenuItem save = new JMenu("保存"); menuFile.add(open); menuFile.add(save); menuBar.add(menuFile); menuBar.add(menuEdit); menuBar.add(menuView); con.add(menuBar, BorderLayout.NORTH); jf.addWindowListener(new WindowAdapter() {// 关闭按钮监听 @Override public void windowClosing(WindowEvent e) { int ret = JOptionPane.showConfirmDialog(null, "是否要退出?", "提示", JOptionPane.YES_OPTION); if (ret == JOptionPane.YES_OPTION) { jf.dispose(); } } }); ok.addActionListener(new ActionListener() {//创建登陆按钮的动作监听器 @Override public void actionPerformed(ActionEvent e) { String name = username.getText();//获取到用户名文本框的内容 String pass = passworld.getText();//获取到密码文本框的内容 if (name.equals("admin") && pass.equals("123456")) { // JOptionPane.showMessageDialog(null, "正在登陆"); // 删除添加的组件 con.remove(jl); con.remove(username); con.remove(jl1); con.remove(passworld); con.remove(ok); con.remove(cancel); con.remove(clockText); List list = Lists.newArrayList(); for (int i = 0; i < 5; i++) { Person person = new Person(); person.setName("姓名 :" + i); person.setSex("性别 1男 0女 :" + i % 2); person.setAge("年龄 :" + i); person.setMajor("专业 :" + i); list.add(person); } List ignore = Lists.newArrayList(); ignore.add("serialVersionUID"); ignore.add("pwd"); Person person = new Person(); Field[] fields = person.getClass().getDeclaredFields(); String[] names = new String[(fields.length - ignore.size())]; Object[][] data = new Object[list.size()][(fields.length - ignore.size())]; getData(list, data, names, ignore); // 创建表格中的横标题 JTable table = new JTable(data, names); // 设置此表视图的首选大小 table.setPreferredScrollableViewportSize(new Dimension(800, 550)); // 将表格加入到滚动条组件中 JScrollPane scrollPane = new JScrollPane(table); // 再将滚动条组件添加到中间容器中 con.add(scrollPane, BorderLayout.CENTER); clockText.setUserName(name); con.add(clockText, BorderLayout.SOUTH); con.repaint();// 重新生成页面 jf.pack(); // 自适应大小 } else { JOptionPane.showMessageDialog(null, "用户名或者密码不正确,请重新输入"); passworld.setText(null); // 判断是否达到最大点击次数 Integer count = map.get(name); if (count != null) { count++; if (count > 2) { jf.dispose(); } } else { count = 1; } map.put(name, count); } //这个地方应该加一个自动刷新验证码的功能,不管是验证码错误,还是账号密码错误,都重新输入验证码 } }); cancel.addActionListener(new ActionListener() {//创建取消按钮的事件监听器 @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub jf.dispose(); } }); jf.setVisible(false); jf.setVisible(true); // 放到最后,否则添加的组件显示错误 } // 把一个字符串的第一个字母大写、效率是最高的、 private static String getMethodName(String fildeName) throws Exception { byte[] items = fildeName.getBytes(); items[0] = (byte) ((char) items[0] - 'a' + 'A'); return new String(items); } // 获取表格数据 private static void getData(List source, Object[][] data, String[] title, List ignore) { int index = 0; Object o = source.get(0); Field[] field = o.getClass().getDeclaredFields(); for (int i = 0; i < field.length; i++) { String name = field[i].getName(); if (!ignore.contains(name)) { title[index] = field[i].getName(); index++; } } for (int i = 0; i < source.size(); i++) { Object object = source.get(i); Object[] personData = new Object[title.length]; for (int j = 0; j < title.length; j++) { try { Method m = object.getClass().getMethod("get" + getMethodName(title[j])); // 调用getter方法获取属性值 personData[j] = m.invoke(object); } catch (Exception e) { e.printStackTrace(); } } data[i] = personData; } } // 状态栏 时间 当前登录人 static class ClockText extends JTextField implements ActionListener { Calendar c; private Timer t; private String userName; ClockText() { super(); s(); this.addActionListener(this); t.start(); } ClockText(int i) { super(i); s(); this.addActionListener(this); t.start(); } ClockText(int i, String userName) { super(i); this.userName = userName; s(); this.addActionListener(this); t.start(); } ClockText(String userName) { super(); this.userName = userName; s(); this.addActionListener(this); t.start(); } String getUserName() { return userName; } void setUserName(String userName) { this.userName = userName; } void s() { t = new Timer(1000, this); } @Override public void actionPerformed(ActionEvent e) { c = Calendar.getInstance(); StringBuffer sb = new StringBuffer(); sb.append(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(c.getTime())); if (StringUtils.isNotBlank(userName)) { sb.append(" "); sb.append("当前登录人:"); sb.append(userName); } this.setText(sb.toString()); } } }

 

package com.competition;

import com.alibaba.fastjson.JSON;
import lombok.Data;

import java.io.Serializable;

/**
 * 

* Person *

* Description: 人员表 * * @date 2019-10-12 下午 05:14 */ @Data public class Person implements Serializable { private static final long serialVersionUID = -9211083194694937903L; /** 姓名 */ private String name; /** 密码 */ private String pwd; /** 性别 */ private String sex; /** 年龄 */ private String age; /** 专业 */ private String major; @Override public String toString() { return JSON.toJSONString(this); } }
 

你可能感兴趣的:(JFrame)