java基础学习——Swing图形化用户界面编程

原文链接:https://blog.csdn.net/yiziweiyang/article/details/52317240

链接有详细解释,也有例子,以下是个人参照例子实验的代码。

package gui;

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;

/**
 * swing实现计算器功能
 * @author 乔成强
 * @version 创建时间:2018年5月11日  下午5:43:35
 */
public class GuiDemo extends JFrame implements ActionListener{

    private static final long serialVersionUID = 2499964079704437558L;  

    private JTextField result; // 显示运算结果的文本框
    private JButton[] buttons; // 所有的按钮对象
    private final String[] characters = { "7", "8", "9", "/", "4", "5", "6",
            "*", "1", "2", "3", "-", "0", ".", "=", "+" }; // 所有的按钮文本
    private boolean isFirstDigit = true; // 标记第一次输入数字
    private String operator = "="; // 运算符
    private double resultNum = 0.0; // 运算结果  

    public GuiDemo(String title) {  //构造器 这里记得修改为自己编写的类
        // 标题栏
        super(title);
        // 大小
        setSize(220, 200);
        // 居中
        setLocationRelativeTo(null);
        // 默认关闭操作
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        // 禁止修改大小
        setResizable(false);
        // 初始化文本框与按钮
        generateInterface();
        // 显示
        setVisible(true);
    }  

    public static void main(String [] args){
        GuiDemo gd = new GuiDemo("计算器");
    }
    /**
     * 初始化文本框与按钮,生成界面
     */
    private void generateInterface() {
        /* 文本框 */
        result = new JTextField("0");
        // 右对齐
        result.setHorizontalAlignment(JTextField.RIGHT);
        // 不允许编辑
        result.setEditable(false);
        // 将文本框添加到窗体北方
        add(result, BorderLayout.NORTH);  

        /* 按钮 */
        buttons = new JButton[characters.length];
        JPanel pnl = new JPanel(new GridLayout(4, 4, 5, 5));
        for (int i = 0; i < buttons.length; i++) {
            buttons[i] = new JButton(characters[i]);
            buttons[i].addActionListener(this);
            buttons[i].setFocusable(false); // 不允许按钮定位焦点
            pnl.add(buttons[i]);
        }
        // 将所有按钮添加到窗体的中间
        add(pnl, BorderLayout.CENTER);  

        // 允许内容面板定位焦点
        this.getContentPane().setFocusable(true);  

        // 注册内容面板事件监听器
        // 使用适配器实现
        this.getContentPane().addKeyListener(new KeyAdapter() {
            @Override
            public void keyPressed(KeyEvent e) {
                char ch = e.getKeyChar(); // 获取按钮字符
                /* 处理数字或运算符 */
                if (‘.‘ == ch || Character.isDigit(ch)) { // 数字小数点
                    handleNumber(String.valueOf(ch));
                } else if ("+-*/=".indexOf(ch) != -1 || e.getKeyCode() == 10) { // 运算符
                    handleOperator(String.valueOf(ch));
                } else if (e.getKeyCode() == 8) { // 退格键
                    String tmp = result.getText();
                    if (tmp.length() == 1) {
                        result.setText("0");
                        isFirstDigit = true;
                    } else {
                        result.setText(tmp.substring(0, tmp.length() - 1));
                    }
                }
            }
        });
    }  

    @Override
    public void actionPerformed(ActionEvent e) {
        // 获取点击按钮的文本
        String text = e.getActionCommand();  

        /* 处理数字或运算符 */
        if (".".equals(text) || Character.isDigit(text.charAt(0))) { // 数字小数点
            handleNumber(text);
        } else if ("+-*/=".indexOf(text) != -1) { // 运算符
            handleOperator(text);
        }
    }  

    /**
     * 处理数字与小数点
     *
     * @param text
     */
    private void handleNumber(String text) {
        if (isFirstDigit) { // 第一次输入
            if (".".equals(text)) {
                this.result.setText("0.");
            } else {
                this.result.setText(text);
            }
        } else if ("0".equals(text) && "0".equals(this.result.getText())) { // 输入0
            isFirstDigit = true;
            return;
        } else if (".".equals(text) && this.result.getText().indexOf(".") == -1) { // 输入小数点
            this.result.setText(this.result.getText() + ".");
        } else if (!".".equals(text)) { // 输入不为小数点
            this.result.setText(this.result.getText() + text);
        }
        // 修改第一次输入标记
        isFirstDigit = false;
    }  

    /**
     * 处理运算符
     *
     * @param text
     */
    private void handleOperator(String text) {
        /* 进行算术运算判断 */
        switch (operator) {
        case "+":
            resultNum += Double.parseDouble(this.result.getText());
            break;
        case "-":
            resultNum -= Double.parseDouble(this.result.getText());
            break;
        case "*":
            resultNum *= Double.parseDouble(this.result.getText());
            break;
        case "/":
            resultNum /= Double.parseDouble(this.result.getText());
            break;
        case "=":
            resultNum = Double.parseDouble(this.result.getText());
            break;
        }
        // 将运算结果显示到文本框中
        this.result.setText(String.valueOf(resultNum));
        // 将参数运算符放入成员变量中
        this.operator = text;
        // 下一个数字是第一次输入
        isFirstDigit = true;
    }  

}

原文地址:https://www.cnblogs.com/qcq0703/p/9025909.html

时间: 2024-10-13 00:51:41

java基础学习——Swing图形化用户界面编程的相关文章

Java基础学习(六) 网络编程简介

基础知识:1.osi分层模型和TCP/IP分层模型对应关系 2.七层模型与协议的对应关系 网络层 ------------ IP(网络之间的互联协议) 传输层 ------------ TCP(传输控制协议).UDP(用户数据报协议) 应用层 ------------ Telnet(Internet远程登录服务的标准协议和主要方式).FTP(文本传输协议).HTTP(超文本传送协议) 3.IP地址和端口号1.ip地址用于唯一标示网络中的一个通信实体,这个通信实体可以是一台主机,可以是一台打印机,

Java学习之图形化界面(Swing基础)

Java学习之图形化界面(Swing基础) 一.Java图形化界面发展史 起初在早期的计算机系统中,电脑只提供命令行界面(CLI),现在在Windows中开个DOS窗口,就可以历史足迹,这就是命令行界面在 现在Windows界面中的体现. 后来Apple公司率先在电脑的操作系统中实现了图形化的用户界面(Graphical User Interface,简称GUI),但由于Apple公司封闭的市场策略,自己完成电脑硬件.操作系统.应用软件一条龙的产品,与其它PC不兼容.这使得Apple公司错过了一

java基础学习总结——GUI编程(二)

永不放弃,一切皆有可能!!! 只为成功找方法,不为失败找借口! java基础学习总结——GUI编程(二) 一.事件监听 测试代码一: 1 package cn.javastudy.summary; 2 3 import java.awt.*; 4 import java.awt.event.*; 5 6 public class TestActionEvent { 7 public static void main(String args[]) { 8 Frame f = new Frame("

java基础学习总结——GUI编程(一)

永不放弃,一切皆有可能!!! 只为成功找方法,不为失败找借口! java基础学习总结——GUI编程(一) 一.AWT介绍 所有的可以显示出来的图形元素都称为Component,Component代表了所有的可见的图形元素,Component里面有一种比较特殊的图形元素叫Container,Container(容器)在图形界面里面是一种可以容纳其它Component元素的一种容器,Container本身也是一种Component的,Container里面也可以容纳别的Container. Cont

java基础学习总结——网络编程

永不放弃,一切皆有可能!!! 只为成功找方法,不为失败找借口! java基础学习总结——网络编程 一.网络基础概念 首先理清一个概念:网络编程 != 网站编程,网络编程现在一般称为TCP/IP编程. 二.网络通信协议及接口 三.通信协议分层思想 四.参考模型 五.IP协议 每个人的电脑都有一个独一无二的IP地址,这样互相通信时就不会传错信息了. IP地址是用一个点来分成四段的,在计算机内部IP地址是用四个字节来表示的,一个字节代表一段,每一个字节代表的数最大只能到达255. 六.TCP协议和UD

JAVA基础学习流程

JAVA基础学习: 第一步:学习JAVA的开发环境配置.开发第一个Java程序.也建议大家开始使用eclipse等IDE,不必纠结是不是一定要从记事本开始. 第二步:学习数据类型.运算符.变量.这是编程的基础,是程序的“砖块”.这些内容大多数编程语言都有,而且非常类似. 第三步:学习控制语句.这是编程的基础,是程序的“混凝土”.有了控制语句+变量,理论上你就可以写任意的程序了.因此,这是进入程序的门槛,需要大量的练习. 第四步:学习面向对象基础.通过类.对象.包等基本概念讲解.学习的时候,一定要

java工程开发之图形化界面之(第三课)

上面我们讲述了通过JOptionPane进行文本I/O操作,一个是通过JOptionPane来获取的 参考链接:http://blog.sina.com.cn/s/blog_993d254201013pgh.html#cmt_3339216 JOptionPane类 1.属于javax.swing 包. 2.功能:定制四种不同种类的标准对话框. ConfirmDialog 确认对话框.提出问题,然后由用户自己来确认(按"Yes"或"No"按钮) InputDialo

java基础学习笔记day01

java基础学习笔记day01 1.软件开发: 软件:按照特定顺序组织的计算机数据和指令的集合 开发:软件的制作过程 软件开发:借助开发工具和计算机语言制作软件 2.java概述: java之父:詹姆斯·高斯林 JDK:java开发环境 jre:java运行环境 JVM:java虚拟机 java跨平台是因为,JVM能在不同的平台运行,JVM是跨平台的 JavaSE:标准版 JavaME:手机端,物联网 JavaEE:企业版,互联网项目 3.java语言特点: 简单性 解释性 面向对象 高性能 分

java基础学习总结——java环境变量配置(转)

java基础学习总结——java环境变量配置 前言 学习java的第一步就要搭建java的学习环境,首先是要安装 JDK,JDK安装好之后,还需要在电脑上配置"JAVA_HOME”."path”."classpath"这三个环境变量才能够把java的开发环境 搭建好.在没安装过jdk的环境下,path环境变量是系统变量,本来存在的,而JAVA_HOME和classpath是不存在的. 一.配置JAVA_HOME变量 操作步骤(win7系统):计算机→右键“属性”→高