2 package org.forester.archaeopteryx.util;
4 import java.awt.event.ActionEvent;
5 import java.awt.event.ActionListener;
6 import java.awt.event.MouseEvent;
7 import java.awt.event.MouseListener;
9 import javax.swing.Action;
10 import javax.swing.Icon;
11 import javax.swing.JButton;
12 import javax.swing.Timer;
14 public final class TypomaticJButton extends JButton implements ActionListener, MouseListener {
16 private static final long serialVersionUID = 7435606927739361980L;
17 private boolean pressed = false;
18 private boolean repeat_enabled = true;
19 private Timer timer = null;
20 private int initial_delay = 600;
21 private int delay = 200;
22 private int modifiers = 0;
24 public TypomaticJButton() {
29 public TypomaticJButton( final Action a ) {
34 public TypomaticJButton( final Icon icon ) {
39 public TypomaticJButton( final String text ) {
44 public TypomaticJButton( final String text, final Icon icon ) {
50 final public void actionPerformed( final ActionEvent ae ) {
51 if ( ae.getSource() == timer ) {
52 final ActionEvent event = new ActionEvent( this,
53 ActionEvent.ACTION_PERFORMED,
54 super.getActionCommand(),
56 super.fireActionPerformed( event );
60 final public int getDelay() {
64 final public int getInitialDelay() {
68 final private void init() {
69 addMouseListener( this );
70 timer = new Timer( delay, this );
71 timer.setRepeats( true );
74 final public boolean isRepeatEnabled() {
75 return repeat_enabled;
79 final public void mouseClicked( final MouseEvent me ) {
80 if ( me.getSource() == this ) {
82 if ( timer.isRunning() ) {
89 final public void mouseEntered( final MouseEvent e ) {
90 if ( ( e.getSource() == this ) && isEnabled() && isRepeatEnabled() ) {
91 if ( pressed && !timer.isRunning() ) {
92 modifiers = e.getModifiers();
93 timer.setInitialDelay( delay );
100 final public void mouseExited( final MouseEvent e ) {
101 if ( e.getSource() == this ) {
102 if ( timer.isRunning() ) {
109 final public void mousePressed( final MouseEvent e ) {
110 if ( ( e.getSource() == this ) && isEnabled() && isRepeatEnabled() ) {
112 if ( !timer.isRunning() ) {
113 modifiers = e.getModifiers();
114 timer.setInitialDelay( initial_delay );
121 final public void mouseReleased( final MouseEvent e ) {
122 if ( e.getSource() == this ) {
124 if ( timer.isRunning() ) {
130 final public void setDelay( final int d ) {
135 final public void setEnabled( final boolean e ) {
136 if ( e != super.isEnabled() ) {
138 if ( timer.isRunning() ) {
142 super.setEnabled( e );
145 final public void setInitialDelay( final int d ) {
149 final public void setRepeatEnabled( final boolean e ) {
152 if ( timer.isRunning() ) {