不定时搞事情篇 No.1 神途BOSS时间记录器

人形大宝宝看到不要生气哈,毕竟你看剧啦,哈哈哈哈


神途

这是一款类似于传奇的游戏,其中有很多的奖励丰富的BOSS,而且刷新很有规律,规律如下

  • 从死亡开始计时
  • 默认一般为半小时
  • 半小时后在死亡地点附近进行复活刷新。
计时器

利用这里特点,我们就可以自己做一个计时器,来记录BOSS的相关信息。

因为这个本来不想发的,但是想到以后应该还会再写类似的冬冬,所以我把这个发上来,记录一下。

数据库建表

我们需要有以下信息进行保存。

这里写图片描述

以下是建表的SQL语句

/*
SQLyog Ultimate v12.09 (64 bit)
MySQL - 5.5.22 : Database - game
*********************************************************************
*/


/*!40101 SET NAMES utf8 */;

/*!40101 SET SQL_MODE=''*/;

/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
CREATE DATABASE /*!32312 IF NOT EXISTS*/`game` /*!40100 DEFAULT CHARACTER SET gbk */;

USE `game`;

/*Table structure for table `shentu` */

DROP TABLE IF EXISTS `shentu`;

CREATE TABLE `shentu` (
  `name` varchar(100) NOT NULL COMMENT '怪兽名字',
  `map` varchar(100) DEFAULT NULL COMMENT '地图名字',
  `time` varchar(100) DEFAULT NULL COMMENT '死亡时间',
  `x` varchar(20) DEFAULT NULL COMMENT 'x坐标',
  `y` varchar(20) DEFAULT NULL COMMENT 'y坐标',
  `time2` varchar(100) DEFAULT NULL COMMENT '下一次刷新时间',
  `time3` varchar(20) DEFAULT NULL COMMENT '刷新间隔',
  PRIMARY KEY (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;

/*Data for the table `shentu` */

insert  into `shentu`(`name`,`map`,`time`,`x`,`y`,`time2`,`time3`) values ('福利怪_01','贵族寝宫','1:37:35','95','151','2:7:35','30'),('福利怪_02','贵族寝宫','1:40:37','141','106','2:10:38','30'),('福利怪_03','英雄本色-专属','1:43:17','28','56','2:13:17','30'),('煞·破军_01','贵宾寝宫','1:4:11','94','118',NULL,NULL),('玄·圣君_01','贵族寝宫','1:34:22','89','67',NULL,NULL);

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
Java数据库操作

这个是以前写好的一个操作类,直接拿过来。

数据库链接信息.properties

drivers = com.mysql.jdbc.Driver
url = jdbc:mysql://localhost:3306/game?characterEncoding=UTF-8
user = ****
passwd = ******

DBMap.java

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package db;

import java.util.HashMap;
import java.util.LinkedList;
import java.util.Set;

/**
 *
 * @author lol
 */
public class DBMap extends HashMap<String, LinkedList<Object> > {

    public DBMap() {
        super();
    }

    public static int getLength(DBMap m) {
       return m.values().iterator().next().size();
    }

    public static LinkedList<LinkedList<Object> > toHigh(DBMap m) {
        LinkedList<LinkedList<Object> > list = new LinkedList();
        Set<String> set = m.keySet();
        for(String str : set) {
            list.add(m.get(str));
        }
        return list;
    }
    public static LinkedList<LinkedList<Object> > toRow(DBMap m) {
        LinkedList<LinkedList<Object> > list = new LinkedList();
        LinkedList<LinkedList<Object> > hList = toHigh(m);
        LinkedList<Object> [] gList = hList.toArray(new LinkedList[0]);
        Object [][] g = new Object[gList.length][];
        for (int i = 0; i < gList.length; i++) {
            g[i] = gList[i].toArray();
        }
        int size = DBMap.getLength(m);
        for (int i = 0; i < size; i++) {
            LinkedList<Object> tList = new LinkedList();
            int length = m.size();
            for (int j = 0; j < length; j++) {
                tList.add(g[j][i]);
            }
            list.add(tList);
        }
        return list;
    }
}

DBMan.java

package db;

import java.io.IOException;
import java.io.InputStream;
import java.io.PrintStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedList;
import java.util.Properties;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;

public class DBMan {

    private String drivers;
    private String url;
    private String user;
    private String passwd;

    private Connection conn;
    private PreparedStatement stmt;
    private ResultSet rs;

    private static DBMan instance;

    private DBMan() throws IOException {
        reload();
    }

    public void reload() throws IOException {
        InputStream in = DBMan.class.getResourceAsStream("./数据库链接信息.properties");
        Properties pro = new Properties();
        pro.load(in);
        drivers = pro.getProperty("drivers");
        url = pro.getProperty("url");
        user = pro.getProperty("user");
        passwd = pro.getProperty("passwd");
    }

    public static DBMan getInstance() throws IOException {
        if (instance == null) {
            instance = new DBMan();
        }
        return instance;
    }

    public void display(DBMap map, PrintStream out, String... str) {
        if (map == null) {
            return;
        }
        LinkedList[] q = new LinkedList[map.size()];
        int col = str.length;
        String temp = new String();
        // 打印表头,并决定要输出的数据是那些。
        if (col == 0) {
            Set<String> set = map.keySet();
            for (String s : set) {
                q[col++] = map.get(s);
                temp += s + "\t";
            }
        } else {
            for (int i = 0; i < col; i++) {
                q[i] = map.get(str[i]);
                temp += str[i] + "\t";
            }
        }
        int row = q[0].size();
        out.println(temp);
        for (int i = 0; i < row; i++) {
            temp = new String();
            for (int j = 0; j < col; j++) {
                temp += q[j].get(i) + "\t";
            }
            out.println(temp);
        }
    }

    public synchronized DBMap query(String sql, Object... obj) throws ClassNotFoundException, SQLException {
        try {
            DBMap map = new DBMap();
            open();
            stmt = conn.prepareStatement(sql);
            for (int i = 0; i < obj.length; i++) {
                stmt.setObject(i + 1, obj[i]);
            }
            rs = stmt.executeQuery();
            LinkedList<String> list = new LinkedList();// 存储表头名称
            int col = rs.getMetaData().getColumnCount();// 获取列数
            // 根据表头名称建立键值对
            for (int i = 0; i < col; i++) {
                LinkedList<Object> tList = new LinkedList();
                list.add(rs.getMetaData().getColumnName(i + 1));
                map.put(list.getLast(), tList);
            }
            while (rs.next()) {
                for (int i = 0; i < col; i++) {
                    LinkedList<Object> tList = map.get(list.get(i));
                    tList.add(rs.getObject(i + 1));
                }
            }
            close();
            return map;
        } catch (SQLException ex) {
            close();
            throw ex;
        } catch (ClassNotFoundException ex) {
            close();
            throw ex;
        }
    }

    public synchronized boolean update(String sql, Object... obj) throws ClassNotFoundException, SQLException {
        try {
            open();
            stmt = conn.prepareStatement(sql);
            for (int i = 0; i < obj.length; i++) {
                stmt.setObject(i + 1, obj[i]);
            }
            stmt.executeUpdate();
            close();
            return true;
        } catch (ClassNotFoundException ex) {
            close();
            throw ex;
        } catch (SQLException ex) {
            close();
            throw ex;
        }
    }

    private synchronized void open() throws ClassNotFoundException, SQLException {
            Class.forName(drivers);
            conn = DriverManager.getConnection(url, user, passwd);
            conn.setAutoCommit(true);
    }

    private synchronized void close() {
        try {
            stmt.close();
            conn.close();
        } catch (SQLException ex) {

        }
    }
}
接着定义数据类和DAO类

Boss.java

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package boss;

/**
 *
 * @author lol
 */
public class Boss {
    String name;
    String map;
    int x;
    int y;
    String time;
    String time2;
    String time3;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getMap() {
        return map;
    }

    public void setMap(String map) {
        this.map = map;
    }

    public int getX() {
        return x;
    }

    public void setX(int x) {
        this.x = x;
    }

    public int getY() {
        return y;
    }

    public void setY(int y) {
        this.y = y;
    }

    public String getTime() {
        return time;
    }

    public void setTime(String time) {
        this.time = time;
    }

    public String getTime2() {
        return time2;
    }

    public void setTime2(String time2) {
        this.time2 = time2;
    }

    public String getTime3() {
        return time3;
    }

    public void setTime3(String time3) {
        this.time3 = time3;
    }

    public Boss(String name, String map, int x, int y, String time) {
        this.name = name;
        this.map = map;
        this.x = x;
        this.y = y;
        this.time = time;
    }


}

BossControl .java

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package boss;

import db.DBMan;
import db.DBMap;
import java.io.IOException;
import java.sql.SQLException;
import java.util.LinkedList;

public class BossControl {

    public static void add(Boss e) throws SQLException, IOException, ClassNotFoundException {
        String sql = "insert into shentu(name, map, time, time2, time3, x, y) value(?,?,?,?,?,?,?)";
        DBMan db = DBMan.getInstance();
        db.update(sql, e.getName(), e.getMap(), e.getTime(), e.getTime2(), e.getTime3(), e.getX(), e.getY());
    }

    public static void update(Boss e) throws SQLException, IOException, ClassNotFoundException {
        String sql = "UPDATE shentu SET map = ?, time = ?, time2 = ?, time3 = ?, x = ?, y = ? WHERE name = ?";
        DBMan db = DBMan.getInstance();
        db.update(sql, e.getMap(), e.getTime(), e.getTime2(), e.getTime3(), e.getX(), e.getY(), e.getName());
    }

    public static void delete(String name) throws IOException, SQLException, ClassNotFoundException {
        String sql = "delete from shentu where name=?";
        DBMan db = DBMan.getInstance();
        db.update(sql, name);
    }

}
GUI制作

直接使用NetBeans的可视化编程即可。

MainFrame.java

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package main;

import boss.Boss;
import boss.BossControl;
import db.DBMan;
import db.DBMap;
import gui.TextJDialog;
import java.io.IOException;
import java.sql.SQLException;
import java.sql.Time;
import java.util.Date;
import java.util.LinkedList;
import java.util.Map;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.SpinnerNumberModel;
import javax.swing.SwingConstants;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableModel;

/**
 *
 * @author lol
 */
public class MainFrame extends javax.swing.JFrame {

    JFrame f;

    /**
     * Creates new form MainFrame
     */
    public MainFrame() {
        f = this;
        initComponents();
        init();
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jScrollPane1 = new javax.swing.JScrollPane();
        jTable1 = new javax.swing.JTable();
        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        jLabel4 = new javax.swing.JLabel();
        timeText = new javax.swing.JTextField();
        nameText = new javax.swing.JTextField();
        yText = new javax.swing.JSpinner();
        xText = new javax.swing.JSpinner();
        jButton1 = new javax.swing.JButton();
        mapText = new javax.swing.JTextField();
        time2Text = new javax.swing.JTextField();
        jLabel5 = new javax.swing.JLabel();
        jLabel6 = new javax.swing.JLabel();
        time3Text = new javax.swing.JSpinner();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        getContentPane().setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());

        jTable1.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null}
            },
            new String [] {
                "Title 1", "Title 2", "Title 3", "Title 4"
            }
        ));
        jScrollPane1.setViewportView(jTable1);

        getContentPane().add(jScrollPane1, new org.netbeans.lib.awtextra.AbsoluteConstraints(10, 260, 340, 350));

        jLabel1.setFont(new java.awt.Font("宋体", 0, 18)); // NOI18N
        jLabel1.setText("怪兽名字");
        getContentPane().add(jLabel1, new org.netbeans.lib.awtextra.AbsoluteConstraints(10, 10, -1, 32));

        jLabel2.setFont(new java.awt.Font("宋体", 0, 18)); // NOI18N
        jLabel2.setText("地图名字");
        getContentPane().add(jLabel2, new org.netbeans.lib.awtextra.AbsoluteConstraints(10, 49, -1, 32));

        jLabel3.setFont(new java.awt.Font("宋体", 0, 18)); // NOI18N
        jLabel3.setText("位置坐标");
        getContentPane().add(jLabel3, new org.netbeans.lib.awtextra.AbsoluteConstraints(10, 88, -1, 32));

        jLabel4.setFont(new java.awt.Font("宋体", 0, 18)); // NOI18N
        jLabel4.setText("刷新时间(30分)");
        getContentPane().add(jLabel4, new org.netbeans.lib.awtextra.AbsoluteConstraints(10, 170, -1, 32));

        timeText.setFont(new java.awt.Font("宋体", 0, 18)); // NOI18N
        timeText.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                timeTextActionPerformed(evt);
            }
        });
        getContentPane().add(timeText, new org.netbeans.lib.awtextra.AbsoluteConstraints(140, 130, 210, 32));

        nameText.setFont(new java.awt.Font("宋体", 0, 18)); // NOI18N
        nameText.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                nameTextActionPerformed(evt);
            }
        });
        getContentPane().add(nameText, new org.netbeans.lib.awtextra.AbsoluteConstraints(91, 11, 260, 32));
        getContentPane().add(yText, new org.netbeans.lib.awtextra.AbsoluteConstraints(240, 90, 110, 32));
        getContentPane().add(xText, new org.netbeans.lib.awtextra.AbsoluteConstraints(90, 90, 110, 32));

        jButton1.setText("确认");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });
        getContentPane().add(jButton1, new org.netbeans.lib.awtextra.AbsoluteConstraints(250, 210, 100, 40));

        mapText.setFont(new java.awt.Font("宋体", 0, 18)); // NOI18N
        mapText.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                mapTextActionPerformed(evt);
            }
        });
        getContentPane().add(mapText, new org.netbeans.lib.awtextra.AbsoluteConstraints(91, 50, 260, 32));

        time2Text.setFont(new java.awt.Font("宋体", 0, 18)); // NOI18N
        time2Text.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                time2TextActionPerformed(evt);
            }
        });
        getContentPane().add(time2Text, new org.netbeans.lib.awtextra.AbsoluteConstraints(140, 170, 210, 30));

        jLabel5.setFont(new java.awt.Font("宋体", 0, 18)); // NOI18N
        jLabel5.setText("刷新时间");
        getContentPane().add(jLabel5, new org.netbeans.lib.awtextra.AbsoluteConstraints(10, 210, 80, 40));

        jLabel6.setFont(new java.awt.Font("宋体", 0, 18)); // NOI18N
        jLabel6.setText("死亡时间(30分)");
        getContentPane().add(jLabel6, new org.netbeans.lib.awtextra.AbsoluteConstraints(10, 130, 130, 32));

        time3Text.setValue(30);
        getContentPane().add(time3Text, new org.netbeans.lib.awtextra.AbsoluteConstraints(90, 210, 150, 40));

        pack();
    }// </editor-fold>                        

    private void timeTextActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:
    }                                        

    private void nameTextActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:
    }                                        

    private Boss getBoss() {
        String name = nameText.getText();
        String map = mapText.getText();
        int x = Integer.parseInt(xText.getValue().toString());
        int y = Integer.parseInt(yText.getValue().toString());
        String time = String.valueOf(timeText.getText());
        return new Boss(name, map, x, y, time);
    }

    // 显示点击的客户信息
    public void showItem(int row) {
        TableModel m = jTable1.getModel();
        nameText.setText(m.getValueAt(row, 1).toString());
        mapText.setText(m.getValueAt(row, 4).toString());
        xText.setValue(Integer.parseInt(m.getValueAt(row, 2).toString()));
        yText.setValue(Integer.parseInt(m.getValueAt(row, 3).toString()));
    }

    private void save() {
        Boss boss = getBoss();
        long time = new Date().getTime();
        time += Long.parseLong(time3Text.getValue().toString()) * 60 * 1000;
        Date d = new Date(time);
        boss.setTime2(String.valueOf(d.getHours()) + ":" + String.valueOf(d.getMinutes()) + ":" + String.valueOf(d.getSeconds()));
        boss.setTime3(time3Text.getValue().toString());
        try {
            BossControl.add(boss);
        } catch (SQLException | IOException | ClassNotFoundException ex) {
            try {
                System.out.println("已经存在,进行修改" + ex.getMessage());
                BossControl.update(boss);
            } catch (SQLException | IOException | ClassNotFoundException ex1) {
                System.out.println("数据库出错---" + ex1.getMessage() + "\n");
            }
        }
        init();
        JOptionPane.showMessageDialog(this, "操作成功!", "提示", JOptionPane.INFORMATION_MESSAGE);
    }
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        save();
    }                                        

    private void mapTextActionPerformed(java.awt.event.ActionEvent evt) {                                        
        // TODO add your handling code here:
    }                                       

    private void time2TextActionPerformed(java.awt.event.ActionEvent evt) {                                          
        // TODO add your handling code here:
    }                                         

    public void init() {
        String sql = "select name, map, time2, x, y  from shentu";
        this.setResizable(false);
        DBMap m;
        try {
            m = DBMan.getInstance().query(sql);
            showTable(m, title);
        } catch (IOException | ClassNotFoundException | SQLException ex) {
            System.out.println("数据库出错---" + ex.getMessage() + "\n");
        }

        Thread t = new Thread() {

            @Override
            public void run() {
                while (true) {
                    Date d = new Date();
                    timeText.setText(String.valueOf(d.getHours()) + ":" + String.valueOf(d.getMinutes()) + ":" + String.valueOf(d.getSeconds()));
                    long time = new Date().getTime();
                    time += Long.parseLong(time3Text.getValue().toString()) * 60 * 1000;
                    d = new Date(time);
                    time2Text.setText(String.valueOf(d.getHours()) + ":" + String.valueOf(d.getMinutes()) + ":" + String.valueOf(d.getSeconds()));
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException ex) {

                    }
                }
            }

        };

        t.start();
    }

    // 显示数据
    public void showTable(Map<String, LinkedList<Object>> map, String... title) {
        // 将数据生成二维数组
        Set<String> set = map.keySet();
        Object[] a = map.values().toArray();
        int size = ((LinkedList<Object>) a[0]).size();
        Object[][] cc = new Object[size][a.length];
        for (int i = 0; i < a.length; i++) {
            LinkedList<Object> l = (LinkedList<Object>) a[i];
            for (int j = 0; j < size; j++) {
                cc[j][i] = l.get(j);
            }
        }
        // 将二维数组导入并设置标头
        Object[] ar = set.toArray();
        if (title.length == set.size()) {
            ar = title;
        }
        // 实例化,并点击事件
        jTable1 = new JTable(cc, ar) {
            @Override
            public boolean isCellEditable(int row, int column) {
                if (lastCol == column && lastRow == row) {
                    TextJDialog t = new TextJDialog(f, true, "确认删除请输入Y");
                    if (t.getText(0).equalsIgnoreCase("Y")) {
                        try {
                            BossControl.delete(jTable1.getModel().getValueAt(row, 1).toString());
                            init();
                            JOptionPane.showMessageDialog(null, "删除成功", "提示", JOptionPane.INFORMATION_MESSAGE);
                        } catch (Exception ex) {
                            JOptionPane.showMessageDialog(f, ex.getMessage(), "错误", JOptionPane.ERROR_MESSAGE);
                        }
                    }
                } else {
                    showItem(row);
                }
                lastRow = row;
                lastCol = column;
                return false;
            }
        };
        // 将单元格内容居中显示
        DefaultTableCellRenderer render = new DefaultTableCellRenderer();
        render.setHorizontalAlignment(SwingConstants.CENTER);
        for (int i = 0; i < ar.length; i++) {
            jTable1.getColumn(ar[i]).setCellRenderer(render);
        }
        jScrollPane1.setViewportView(jTable1);
        this.revalidate();
    }

    private int lastRow;
    private int lastCol;
    String[] title = {"刷新时间", "怪兽名字", "X坐标", "Y坐标", "地图名称"};
    // Variables declaration - do not modify                     
    private javax.swing.JButton jButton1;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTable jTable1;
    private javax.swing.JTextField mapText;
    private javax.swing.JTextField nameText;
    private javax.swing.JTextField time2Text;
    private javax.swing.JSpinner time3Text;
    private javax.swing.JTextField timeText;
    private javax.swing.JSpinner xText;
    private javax.swing.JSpinner yText;
    // End of variables declaration                   
}
工具类

这个是之前写好的,可以自定义进行弹框输入并返回。

TextJDialog .java

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package gui;

import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JTextField;

/**
 *
 * @author lol
 */
public class TextJDialog extends JDialog {

    private JTextField[] text;
    private int size;
    private TextJDialog jd;

    public TextJDialog(Frame owner, boolean modal, String... str) {
        super(owner, modal);
        this.setTitle("请输入以下内容");
        if (str.length == 0) {
            return;
        }
        TextListener lis = new TextListener();
        jd = this;
        size = str.length;
        text = new JTextField[size];
        this.setLayout(null);
        int i;
        int maxLength = -1;
        for (i = 0; i < size; i++) {
            JLabel la = new JLabel(str[i]);
            int l = str[i].length();
            if (l > maxLength) {
                maxLength = l;
            }
            la.setBounds(10, 5 + 30 * i, 15 * l, 25);
            text[i] = new JTextField();
            text[i].setBounds(20 + 15 * l, 5 + 30 * i, 150, 25);
            text[i].addActionListener(lis);
            this.add(la);
            this.add(text[i]);
        }
        JButton b = new JButton("确认");
        b.addActionListener(lis);
        b.setBounds(170 + maxLength * 15, 5 + 30 * (i - 1), 60, 25);
        this.addKeyListener(lis);
        this.add(b);
        this.setBounds(owner.getX() + owner.getWidth() / 2 - 150, owner.getY() + owner.getHeight() / 2 - (size + 1) * 20, 275 + maxLength * 15, (size + 1) * 40);
        this.setVisible(true);
    }

    public String getText(int id) {
        if (id >= 0 && id < size) {
            return text[id].getText();
        } else {
            return null;
        }
    }

    public String[] getTexts() {
        String[] str = new String[size];
        for (int i = 0; i < size; i++) {
            str[i] = text[i].getText();
        }
        return str;
    }
    class TextListener extends KeyAdapter implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent e) {
            jd.setVisible(false);
        }
        @Override
        public void keyPressed(KeyEvent e) {
            if (e.getKeyChar() == KeyEvent.VK_ENTER) {
                jd.setVisible(false);
            }
        }
    }
}
主函数

Main.java

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package main;

/**
 *
 * @author lol
 */
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        MainFrame m = new MainFrame();
        m.setTitle("神途BOSS计时器------by.凌恋");
        m.setVisible(true);
        m.setAlwaysOnTop(true); // 置顶
    }

}
运行效果

这里写图片描述

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值