700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 实验十五 Java Swing 图形用户界面程序设计应用

实验十五 Java Swing 图形用户界面程序设计应用

时间:2022-05-14 21:30:41

相关推荐

实验十五 Java Swing 图形用户界面程序设计应用

实验内容与结果

1、实现一个计算器。

2、实现一个记事本程序。

3、创建一用户登录界面, 接受用户输入的帐号和密码, 给三次输入机会,要求连接

数据库实现。

计算器

import javax.swing.*;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.util.ArrayList;//计算器public class Work14_1 extends JPanel {public Graphics g = null;public static void main(String[] args) {Work14_1 w = new Work14_1();w.run();}public void run() {CouterListener couterListener = new CouterListener();// 窗体标题JFrame frame = new JFrame("Calculate");// 布局:上下左右的间距为10FlowLayout fl = new FlowLayout(FlowLayout.CENTER, 10, 10);frame.setLayout(fl);// 界面的的尺寸frame.setSize(270, 400);frame.setLocationRelativeTo(null);frame.setDefaultCloseOperation(3);// 固定窗体的大小,无法通过鼠标改变大小frame.setResizable(false);// 多行文本框JTextArea field = new JTextArea();// 文本框的尺寸field.setPreferredSize(new Dimension(250, 50));// 设置最外层Frame的行数为2,一行放文本框,一行放按钮field.setRows(3);frame.add(field);// 背景颜色(可根据自己要求进行修改)frame.setBackground(Color.GRAY);couterListener.setJText(field);// 按钮布局,可以根据需要进行修改String BtArray[] = { "1", "2", "3", "+","4", "5", "6", "-","7", "8", "9", "*",".", "0", "=", "/" };// 按钮一共4行4列this.setLayout(new GridLayout(4, 4, 10, 10));frame.add(this);for (int i = 0; i < 16; i++) {JButton button = new JButton(BtArray[i]);// 按钮的颜色button.setForeground(Color.DARK_GRAY);button.setPreferredSize(new Dimension(50, 50));button.setContentAreaFilled(false);this.add(button);// 给按钮绑定点击事件button.addActionListener(couterListener);}//添加CE按钮JButton ce = new JButton("CE");ce.setForeground(Color.DARK_GRAY);ce.setPreferredSize(new Dimension(250, 50));ce.setContentAreaFilled(false);ce.addActionListener(couterListener);frame.add(ce);// 使窗口显示frame.setVisible(true);g = frame.getGraphics();}}class CouterListener implements ActionListener {// 文本域对象private JTextArea JF;public int x = 0;//记录最新输入的是否为数字public boolean isNumber = true;// 结果public Double resulte = 0.0, temp = 0.0;public String num[] = new String[3];// 用于保存等号之前一次的运算符,比如 + - * /public String count;// 设置文本域public void setJText(JTextArea F) {JF = F;}@Overridepublic void actionPerformed(ActionEvent e) {// 运算符事件:+ - * / 运算符ArrayList calculateCommands = new ArrayList<String>();calculateCommands.add("+");calculateCommands.add("-");calculateCommands.add("*");calculateCommands.add("/");// 获得当前的命令String command = e.getActionCommand();if ("CE".equals(command)) {// 归零resulte = temp = 0.0;count = "";JF.setText("");isNumber = true;}else if (calculateCommands.contains(command)) {// + - * /JF.setText(JF.getText() + command + "\n");if (isNumber) {//输入运算符时,result保存运算符之前的数resulte = temp;}// 保存本次的运算符count = e.getActionCommand();isNumber = false;} else if ("=".equals(command)) {// 计算结果if ("+".equals(count)) {resulte = resulte + temp;JF.setText(resulte + "");} else if ("-".equals(count)) {resulte = resulte - temp;JF.setText(resulte + "");} else if ("*".equals(count)) {resulte = resulte * temp;JF.setText(resulte + "");} else if ("/".equals(count)) {resulte = resulte / temp;JF.setText(resulte + "");}} else {//输入的不是 ce + - * / = 的时候,即输入的是数字的时候JF.setText(JF.getText() + command);if (!isNumber) {//如果上一次输入的是字符//正则表达式:根据换行符[\n]将文本框内字符串变成字符串数组num = JF.getText().split("\\n");//将运算符后面的(即换行符后面的)数字保存到temp中去temp = Double.parseDouble(num[1]);// 将下面注释打开就可以知道num和temp的作用了System.out.println("num: ");for (int i = 0; i < num.length; i++) {System.out.printf("[" + i + "]:\"" +num[i] + "\"\n");}System.out.println("temp: " + temp);} else {//如果是第一次输入数字temp = Double.parseDouble(JF.getText());}}}}

图形界面如下:

记事本

import javax.swing.*;import java.awt.*;import java.awt.datatransfer.Clipboard;import java.awt.datatransfer.DataFlavor;import java.awt.datatransfer.StringSelection;import java.awt.datatransfer.Transferable;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.*;//记事本//以上都是一些需要用到的库类public class Work14_2 {public static void main(String[] args) {SwingUtilities.invokeLater(Work14_2::creatGUI);}public static void creatGUI() {//创建可视化窗口JFrame f = new JFrame("记事本程序");//设定显示位置,左上角为(0,0),根据笔记本电脑的显示分辨率设置成在正中间显示f.setLocation(480, 270);//这是显示窗口的左上角坐标//设定窗口大小为屏幕1/2倍(电脑显示分辨率)f.setSize(960, 540);//我电脑显示分辨率为1920*1080//创建文本域用来打字显示出来的JTextArea WBY = new JTextArea("Hello");//这里可以输入东西到时候打开窗体自动显示出来WBY.setFont(new Font("", Font.BOLD, 25));//设置文本域为自动换行WBY.setLineWrap(true);//将文本域添加到含有下拉框的面板中JScrollPane MB = new JScrollPane(WBY);//将含有下拉框的面板放入内容面板中f.add(MB);//创建一个菜单栏JMenuBar cdl = new JMenuBar();//创建菜单栏上的5个菜单并且设置字体和大小JMenu m1 = new JMenu("文件");JMenu m2 = new JMenu("编辑");JMenu m3 = new JMenu("字体大小");JMenu m4 = new JMenu("字体颜色");JMenu m5 = new JMenu("帮助文档");m1.setFont(new Font("", Font.BOLD, 25));m2.setFont(new Font("", Font.BOLD, 25));m3.setFont(new Font("", Font.BOLD, 25));m4.setFont(new Font("", Font.BOLD, 25));m5.setFont(new Font("", Font.BOLD, 25));//在菜单的基础上创建下拉可选菜单项按钮JMenuItem x1 = new JMenuItem("新建");JMenuItem x2 = new JMenuItem("保存");JMenuItem x3 = new JMenuItem("打开");JMenuItem x4 = new JMenuItem("退出");JMenuItem x5 = new JMenuItem("复制");JMenuItem x6 = new JMenuItem("粘贴");JMenuItem x7 = new JMenuItem("裁剪");JMenuItem x8 = new JMenuItem("删除");JMenuItem x9 = new JMenuItem("大");JMenuItem x10 = new JMenuItem("中");JMenuItem x11 = new JMenuItem("小");JMenuItem x12 = new JMenuItem("红色");JMenuItem x13 = new JMenuItem("绿色");JMenuItem x14 = new JMenuItem("蓝色");JMenuItem x15 = new JMenuItem("黑色");JMenuItem x16 = new JMenuItem("百度");//为下拉可选菜单项设置字体和大小x1.setFont(new Font("s", Font.BOLD, 20));x2.setFont(new Font("s", Font.BOLD, 20));x3.setFont(new Font("s", Font.BOLD, 20));x4.setFont(new Font("s", Font.BOLD, 20));x5.setFont(new Font("s", Font.BOLD, 20));x6.setFont(new Font("s", Font.BOLD, 20));x7.setFont(new Font("s", Font.BOLD, 20));x8.setFont(new Font("s", Font.BOLD, 20));x9.setFont(new Font("s", Font.BOLD, 40));x10.setFont(new Font("s", Font.BOLD, 30));x11.setFont(new Font("s", Font.BOLD, 20));x12.setFont(new Font("s", Font.BOLD, 20));x13.setFont(new Font("s", Font.BOLD, 20));x14.setFont(new Font("s", Font.BOLD, 20));x15.setFont(new Font("s", Font.BOLD, 20));x16.setFont(new Font("s", Font.BOLD, 20));//给颜色下拉菜单项分别设置相应的背景色,这样展现就会直观一点了x12.setBackground(Color.RED);x13.setBackground(Color.GREEN);x14.setBackground(Color.BLUE);x15.setBackground(Color.BLACK);//实现新建记事本按钮的功能x1.addActionListener(e -> {creatGUI();});//再次调用该方法创建另外一个记事本//实现保存记事本按钮的功能x2.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e2) {//创建一个窗体并且设置窗体标题和保存功能FileDialog fileDialog = new FileDialog(f, "保存文件至", FileDialog.SAVE);//保存文件的对话框设置为可见fileDialog.setVisible(true);//获取保存的路径和设置的文件名String absPath = fileDialog.getDirectory() + fileDialog.getFile();try {//用来检测是否设置了保存路径//设置输出文件名为保存的路径下面的文件名BufferedWriter wr = new BufferedWriter(new FileWriter(absPath));//获取文本域字符串String s = WBY.getText();//开始写入wr.write(s);//写完关闭wr.close();} catch (IOException e) {e.printStackTrace();}}});//实现打开记事本按钮的功能x3.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e2) {//创建一个窗体并且设置窗体标题和打开功能FileDialog fileDialog = new FileDialog(f, "打开文件", FileDialog.LOAD);//打开文件的对话框设置为可见fileDialog.setVisible(true);//获取打开的路径和设置的文件名String absPath = fileDialog.getDirectory() + fileDialog.getFile();try {//用来检测是否设置了打开路径//设置读入文件名为打开的路径下面的文件名BufferedReader re = new BufferedReader(new FileReader(absPath));String line;while ((line = re.readLine()) != null)//只要文件中不为空就不断追加到文本框中WBY.append(line + '\n');//读取完毕结束re.close();} catch (Exception e) {e.printStackTrace();}}});//实现退出记事本按钮的功能x4.addActionListener(e -> System.exit(0));//调用文件工具箱下的系统剪贴板方法Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();//实现复制文本按钮的功能x5.addActionListener(e -> {//将选中的文本内容存入text中String text = WBY.getSelectedText();//传送到字符串里面存着StringSelection selection = new StringSelection(text);//将得到的内容放入到剪切板中clipboard.setContents(selection, null);});//实现粘贴文本按钮的功能x6.addActionListener(e -> {//获取系统剪贴板中的内容Transferable text = clipboard.getContents(null);//判断剪贴板中的内容是否支持文本if (text.isDataFlavorSupported(DataFlavor.stringFlavor)) {try {//强制转换剪贴板中的内容String text1 = (String) text.getTransferData(DataFlavor.stringFlavor);//获取当前光标的位置int n=WBY.getCaretPosition();//插入复制的内容到文本框的光标后面WBY.insert(text1,n);} catch (Exception e2) {e2.printStackTrace();}}});//实现裁剪文本按钮的功能x7.addActionListener(e -> {//将得到的选择文本内容存入text中String text = WBY.getSelectedText();//传送到字符串里面存着StringSelection selection = new StringSelection(text);//将得到的内容放到剪切板中clipboard.setContents(selection, null);//将选中文本start到end之间的内容替换为空白""WBY.replaceRange("", WBY.getSelectionStart(), WBY.getSelectionEnd());});//实现删除文本按钮的功能x8.addActionListener(e -> {//将选中文本start到end之间的内容替换为空白WBY.replaceRange("", WBY.getSelectionStart(), WBY.getSelectionEnd());});//实现字体变大的功能x9.addActionListener(e -> {WBY.setFont(new Font("", Font.BOLD, 40));});//实现字体变中等大小的功能x10.addActionListener(e -> {WBY.setFont(new Font("", Font.BOLD, 30));});//实现字体变小的功能x11.addActionListener(e -> {WBY.setFont(new Font("", Font.BOLD, 20));});//实现字体颜色变红的功能x12.addActionListener(e -> {WBY.setForeground(Color.RED);});//实现字体颜色变绿的功能x13.addActionListener(e -> {WBY.setForeground(Color.GREEN);});//实现字体颜色变蓝的功能x14.addActionListener(e -> {WBY.setForeground(Color.BLUE);});//实现字体颜色变黑的功能x15.addActionListener(e -> {WBY.setForeground(Color.BLACK);});//实现打开帮助文档的功能x16.addActionListener(e -> {//创建消息提示框,包括显示内容和弹窗标题JOptionPane.showMessageDialog(f,"百度!", "提示", JOptionPane.INFORMATION_MESSAGE);});//分别给5个菜单添加各自的下拉菜单项m1.add(x1);m1.addSeparator();//两个菜单项之间添加界线m1.add(x2);m1.addSeparator();//两个菜单项之间添加界线m1.add(x3);m1.addSeparator();//两个菜单项之间添加界线m1.add(x4);m2.add(x5);m2.addSeparator();//两个菜单项之间添加界线m2.add(x6);m2.addSeparator();//两个菜单项之间添加界线m2.add(x7);m2.addSeparator();//两个菜单项之间添加界线m2.add(x8);m3.add(x9);m3.addSeparator();//两个菜单项之间添加界线m3.add(x10);m3.addSeparator();//两个菜单项之间添加界线m3.add(x11);m4.add(x12);m4.addSeparator();//两个菜单项之间添加界线m4.add(x13);m4.addSeparator();//两个菜单项之间添加界线m4.add(x14);m4.addSeparator();//两个菜单项之间添加界线m4.add(x15);m5.add(x16);//添加这5个菜单到菜单栏cdl.add(m1);cdl.add(m2);cdl.add(m3);cdl.add(m4);cdl.add(m5);//给窗体添加完善好的菜单栏f.setJMenuBar(cdl);//记事本设置为可见f.setVisible(true);//点击×号结束应用程序f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);}}

图形界面如下:

登录

import java.awt.FlowLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JPasswordField;import javax.swing.JTextField;import javax.swing.SwingUtilities;class DbUtil {static Connection conn = null;static Statement sm = null;static ResultSet rs = null;static String driver = "com.mysql.cj.jdbc.Driver";static String url = "jdbc:mysql://localhost:3306/testdatabase";static String username = "root";static String password = "mysql1234";static {try {Class.forName("com.mysql.cj.jdbc.Driver");conn =DriverManager.getConnection(url, username, password);sm = conn.createStatement();} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public static ResultSet getResult(String sql) {try {rs = sm.executeQuery(sql);} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}return rs;}}public class Work14_3 extends DbUtil {public static void main(String[] args) {SwingUtilities.invokeLater(() -> createAndShowGUI());}public static boolean checkByUnameAndPwd(String uname, String pwd) {String sql = "select * from user where name='" + uname + "' and password='" + pwd + "' ";ResultSet rs = getResult(sql);boolean flag = false;try {while (rs.next()) {flag = true;}} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}return flag;}public static void createAndShowGUI() {final int[] count = {0};JFrame f = new JFrame();f.setTitle("登录");f.setSize(210, 164);f.setLocationRelativeTo(null);f.setResizable(false);f.setVisible(true);f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);FlowLayout layout = new FlowLayout();layout.setVgap(12);f.setLayout(layout);JLabel lblUser = new JLabel("用户名:");JLabel lblPass = new JLabel("密 码:");JTextField txtUser = new JTextField(10);JPasswordField pwdPass = new JPasswordField(10);JPanel panel = new JPanel();layout = new FlowLayout();layout.setHgap(30);panel.setLayout(layout);JButton btnLogin = new JButton("登录");JButton btnExit = new JButton("退出");f.add(lblUser);f.add(txtUser);f.add(lblPass);f.add(pwdPass);panel.add(btnLogin);panel.add(btnExit);f.add(panel);btnLogin.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {if (count[0] < 3) {if (checkByUnameAndPwd(txtUser.getText(), new String(pwdPass.getPassword()))) {JOptionPane.showMessageDialog(f, "欢迎登录");} else {JOptionPane.showMessageDialog(f, "用户名或密码错误!");count[0]++;}} else {JOptionPane.showMessageDialog(f, "您已经输错三次,请稍后再试!");}}});btnExit.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {JOptionPane.showMessageDialog(f, "欢迎下次再来!");System.exit(0);}});}}

图形界面如下:

对我我这种初学菜鸟挺难得。。。。不全部都是自己写出来的,看了不少代码。只能说,熟能生巧吧。。。可能过一段时间不练就忘完了。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。