zoukankan      html  css  js  c++  java
  • 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;  
        }  
    
    }
  • 相关阅读:
    Solr4.10.2集成Nutch1.9与自带UI界面使用
    Solr4.10.2的IK Analyzer分词器配置
    Solr4.10.2的Tomcat配置
    Nutch1.9安装配置与基本使用介绍
    ubuntu14.10中tomcat8设置管理员帐号
    ubuntu14.10折腾tomcat8,是的,折腾
    spring webservice 开发demo (实现基本的CRUD 数据库采用H2)
    spring webservice 搭建出现的异常处理。异常: NAMESPACE_ERR: An attempt is made to create or change an object in a way whi
    hibernate.cfg.xml hibernate 配置文件模板
    spring 与 CXF 整合 webservice 出现error “Unable to locate Spring NamespaceHandler for XML schema namespace” 总结
  • 原文地址:https://www.cnblogs.com/qcq0703/p/9025909.html
Copyright © 2011-2022 走看看