A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 15044393192 中级黑马   /  2016-4-7 19:55  /  685 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

package cn.itcast.csz.ui;

import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

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

/*
* 主界面
*/
public abstract class CSZFrame extends JFrame {
        protected JButton btn = new JButton("确定");
        protected JTextField[] texts = new JTextField[4];
        protected JLabel label = new JLabel();
        protected String[] results = new String[8];
       
        public CSZFrame() {
                init();
                addComponent();
                addListener();
        }
       
        /*
         * 初始化
         */
        private void init() {
                /*
                 * 设置宽高
                 * 设置初始显示位置
                 * 设置标题
                 * 设置是否可以修改宽高
                 */
                this.setSize(300, 250);
                this.setLocation(500, 300);
                this.setResizable(false);
                this.setTitle("猜数字游戏");
        }
       
        /*
         * 添加组件
         */
        public void addComponent() {
                /*
                 * 设置布局
                 * 添加四个单行文本框
                 * 添加一个按钮
                 * 添加一个Label显示结果
                 */
                // 设置布局
                JPanel p1 = new JPanel();//放四个单行文本框和一个按键
                JPanel p2 = new JPanel();//放Label
                this.add(p1, BorderLayout.NORTH);//放到上面
                this.add(p2);//放到中间
               
                // 添加四个单行文本框
                for(int i = 0; i < texts.length; i++) {
                        texts[i] = new JTextField(3);
                        texts[i].setFont(new Font("宋体", 1, 18));
                        p1.add(texts[i]);
                }
                // 添加一个按钮
                p1.add(btn);
               
                // 添加JLabel
                p2.add(label);
               
                label.setFont(new Font("宋体", 1, 18));
        }
       
        /*
         * 为组件添加监听器
         */
        public void addListener() {
                btn.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent tevt) {
                                try {
                                        String result = getInputAndValidate();
                                        run(result);
                                } catch(RuntimeException e) {
                                        JOptionPane.showMessageDialog(CSZFrame.this, "输入错误!");
                                }
                        }
                });
        }
       
        /*
         * 获取数据并校验
         */
        private String getInputAndValidate() throws RuntimeException {
                StringBuilder result = new StringBuilder();
                for(int i = 0; i < texts.length; i++) {
                        String input = texts[i].getText();
                        int inputNum = Integer.parseInt(input);
                        if(result.toString().contains(inputNum+"")) {
                                throw new RuntimeException("重复输入: " + inputNum);
                        }
                        result.append(inputNum);
                }
                return result.toString();
        }
       
        protected void clearTextField() {
                for(int i = 0; i < texts.length; i++) {
                        texts[i].setText("");
                }
        }
       
        // 核心业务
        public abstract void run(String input);
}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马