import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Timer;
import java.util.TimerTask;

import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;

public class TextFields extends JApplet {
    private JButton b1 = new JButton("Get Text"), b2 = new JButton("Set Text");

private JTextField t1 = new JTextField(30), t2 = new JTextField(30),
            t3 = new JTextField(30);

private String s = new String();

private UpperCaseDocument ucd = new UpperCaseDocument();
    Timer textTimer;
    TextTask task;

public void init() {
        t1.setDocument(ucd);
        ucd.addDocumentListener(new T1());
        b1.addActionListener(new B1());
        b2.addActionListener(new B2());
        DocumentListener dl = new T1();
        t1.addActionListener(new T1A());
        Container cp = getContentPane();
        cp.setLayout(new FlowLayout());
        cp.add(b1);
        cp.add(b2);
        cp.add(t1);
        cp.add(t2);
        cp.add(t3);

// 启动计时,用于拿1秒钟以内的文本变化
        textTimer = new Timer();
        task = new TextTask();
        task.textFields = this;
        textTimer.schedule(task, 1000, 2000);
        
    }

public void SetText(String text) {
        t3.setText(text);
        //task.cancel();
        //System.out.println("task.cancel()");
    }

public String GetText() {
        
        return t1.getText();
    }

class T1 implements DocumentListener {
        public void changedUpdate(DocumentEvent e) {
        }

long oldTimeMillis = 0;

public void insertUpdate(DocumentEvent e) {
            t2.setText(t1.getText());
            long newTimeMillis = System.currentTimeMillis();
            long timeDifference = newTimeMillis - oldTimeMillis;

if (oldTimeMillis != 0 && timeDifference > 500) {
                t3.setText( t1.getText());                             
            }

oldTimeMillis = newTimeMillis;
            
        }

public void removeUpdate(DocumentEvent e) {
            t2.setText(t1.getText());
            long newTimeMillis = System.currentTimeMillis();
            long timeDifference = newTimeMillis - oldTimeMillis;

if (oldTimeMillis != 0 && timeDifference > 800) {
                t3.setText(  t1.getText());
                
            }

oldTimeMillis = newTimeMillis;
            
        }

}

class T1A implements ActionListener {
        private int count = 0;

public void actionPerformed(ActionEvent e) {
            t3.setText("t1 Action Event " + count++);
        }
    }

class B1 implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            if (t1.getSelectedText() == null)
                s = t1.getText();
            else
                s = t1.getSelectedText();
            t1.setEditable(true);
        }
    }

class B2 implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            ucd.setUpperCase(false);
            t1.setText("Inserted by Button 2: " + s);
            ucd.setUpperCase(true);
            t1.setEditable(false);
        }
    }

public static void main(String[] args) {
        run(new TextFields(), 375, 325);
    }

public static void run(JApplet applet, int width, int height) {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(applet);
        frame.setSize(width, height);
        applet.init();
        applet.start();
        frame.setVisible(true);

}

}

class UpperCaseDocument extends PlainDocument {
    private boolean upperCase = true;

public void setUpperCase(boolean flag) {
        upperCase = flag;
    }

public void insertString(int offset, String str, AttributeSet attSet)
            throws BadLocationException {
        if (upperCase)
            str = str.toUpperCase();
        super.insertString(offset, str, attSet);
    }

}

class TextTask extends TimerTask {

public String oldText = "";
    public TextFields textFields;

@Override
    public void run() {
        String newText = textFields.GetText();

if (oldText != "" && !newText.equals(oldText)) {
            textFields.SetText(newText);
            System.out.println(newText);
        }

oldText = newText;
    }

}

// /:~

JtextField的延时更新的更多相关文章

  1. 短时间内多个请求状态更新,导致react 不能及时响应问题总结

    个人总结 这段时间项目中遇到这样一个问题,旧项目中增加了一个聊天对话的模块,这是其他同学负责的部分,因为要有消息提醒,所以做了个轮询.消息提示因为是页头部分,所以每个模块都会引用到.这是背景. 现象 ...

  2. Redis系列(八)--缓存穿透、雪崩、更新策略

    1.缓存更新策略 1.LRU/LFU/FIFO算法剔除:例如maxmemory-policy 2.超时剔除,过期时间expire,对于一些用户可以容忍延时更新的数据,例如文章简介内容改了几个字 3.主 ...

  3. Count Colour_poj2777(线段树+位)

    POJ 2777 Count Color (线段树)   Count Color Time Limit: 1000MS   Memory Limit: 65536K Total Submissions ...

  4. vega prime 1.2 (视景仿真)

    Vega Prime 1.2 (视景仿真) MPI的视景仿真渲染工具Vega是世界上领先的应用于实时视景仿真.声音仿真和虚拟现实等领域的软件环境,它用来渲染战场仿真.娱乐.城市仿真.训练模拟器和计算可 ...

  5. 从一次异常中浅谈Hibernate的flush机制

    摘自http://www.niwozhi.net/demo_c70_i1482.html http://blog.itpub.net/1586/viewspace-829613/ 这是在一次事务提交时 ...

  6. Handoff使用指南 - 理论篇

    Handoff简介 Handoff是iOS 8 和 OS X v10.10中引入的功能,可以让同一个用户在多台设备间传递项目.In iOS 9 and OS X v10.11 支持了Spotlight ...

  7. mysql颠覆实战笔记(四)--商品系统设计(一):商品主表设计

    版权声明:笔记整理者亡命小卒热爱自由,崇尚分享.但是本笔记源自www.jtthink.com(程序员在囧途)沈逸老师的<web级mysql颠覆实战课程 >.如需转载请尊重老师劳动,保留沈逸 ...

  8. POJ 2777(线段树)

    Count Color Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 42507   Accepted: 12856 Des ...

  9. 强化学习(九)Deep Q-Learning进阶之Nature DQN

    在强化学习(八)价值函数的近似表示与Deep Q-Learning中,我们讲到了Deep Q-Learning(NIPS 2013)的算法和代码,在这个算法基础上,有很多Deep Q-Learning ...

随机推荐

  1. nginx指令

    Directives(指令) Syntax(语法): aio on | off | threads[=pool]; Default: aio off; Context: http, server, l ...

  2. jsp页面元素和内置对象

    java server pages其根本是一个简化的servlet设计.实现了在java当中使用html标签.javaEE标准 一.页面元素 1.静态内容 html.js.css相关标签元素. 2.指 ...

  3. Unable to find vcvarsall.bat解决方法

    今天在安装scikit-learn时出现了 error: Unable to find vcvarsall.bat 在安装一些Python模块时,大部分是cpython写的模块时会发生如下错误 err ...

  4. TopFreeTheme精选免费模板【20130619】

    今天给大家推荐7款最新精选的WordPress主题和一个WooCommerce订单跟踪插件,如果你有更换自己博客主题的想法或者正要做自己的博客,不妨试试.一些是WordPress商业模板,但都可以免费 ...

  5. C# winform只有一个进程

    在做winform程序的时候,有时候需要客户只能起一个进程,不能起多个进程,用如下代码可以实现. internal static class Program { private static Mute ...

  6. Hibernate配置

    Ⅰ.Hibernate配置前提工作(E:\):    (一).解压4个工具包         工具如下:apache-ant-1.6.2-bin.zip      →→     apache-ant- ...

  7. STM32F407存储器和总线架构

    http://www.cnblogs.com/ransn/p/5654068.html

  8. 帮你选处理器:CPU T9500-p9500-T9400-T9300-p8700对比分析!

    许多人对处理器是P和T开头含混不清,不甚了解,也怪英特尔的处理器型号实在是太过复杂.这需要具体型号来看的.让我们先来看看英特尔的官方解释吧 T: Mobile Highly Performance-- ...

  9. 删除qq历史签名

    我们在设置新的个性签名的时候之前的签名会被记录,我们可以用手机qq删除这些历史签名,告别过去,做崭新的自己. 到需要删除的历史签名, 从右至左滑动屏幕

  10. JS制作的简单的三级及联

    前台: <form id="form1" runat="server"> <div> 省 <select id="Pro ...