2015-02-12 70 views
0

我想建立一個'啞'手機,因此我需要建立一個字母數字鍵盤。所以這個交易是針對每個按鈕的,如果他們在一定的時間限制(2秒)內重複按下他們輸入的字符改變。例如,按1輸入A,但如果在2秒內再次按下,則輸入變爲B,然後如果在2秒內再次按下輸入,則輸入爲C,依此類推。爪哇鞦韆字母數字鍵盤

已經有一個完全相關的問題(Swing alphanumeric keypad)。我一整天都在讀它,試圖讓它有道理,但是我不能...

我想出了這樣的東西(我知道這可能真的很愚蠢,但我的大腦真的讓我失望了使其不那麼愚蠢),以下代碼位於1按鈕的操作偵聽器內部;

long buttn_last_pressed = System.currentTimeMillis(); 
    line.setText("A"); 
    if ((System.currentTimeMillis() - buttn_last_pressed) <= 2000) { 
     line1.setText("B"); } 

這樣做的問題是輸入總是出來作爲B.我很堅持,我不能讓我解決這個頭,你可以從懵懂的代碼中,我拿出見..任何幫助將非常感激, 非常感謝您提前! :)

回答

1

因此,如果我們看看這個片段中......

long buttn_last_pressed = System.currentTimeMillis(); 
line.setText("A"); 
if ((System.currentTimeMillis() - buttn_last_pressed) <= 2000) { 

除非line.setText("A");真的,真的很慢,這是不太可能需要2秒到達if聲明...

你的意思更多的東西一樣......

Button

import java.awt.Dimension; 
import java.awt.EventQueue; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 

public class JavaApplication787 { 

    public static void main(String[] args) { 
     new JavaApplication787(); 
    } 

    public JavaApplication787() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
        ex.printStackTrace(); 
       } 

       JFrame frame = new JFrame("Testing"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.add(new TestPane()); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

    public class TestPane extends JPanel { 

     private JTextField field; 

     public TestPane() { 
      setLayout(new GridBagLayout()); 
      JButton btn = new JButton("1 ABC"); 
      btn.addActionListener(new ActionListener() { 
       private long lastClick = -1; 
       private int count; 
       private String[] value = {"1", "A", "B", "C"}; 
       @Override 
       public void actionPerformed(ActionEvent e) { 
        long now = System.currentTimeMillis(); 
        if (now - lastClick < 2000) { 
         count++; 
         if (count >= value.length) { 
          count = 0; 
         } 
        } else { 
         count = 0; 
        } 
        field.setText(value[count]); 
        lastClick = System.currentTimeMillis(); 
       } 
      }); 
      field = new JTextField(4); 

      GridBagConstraints gbc = new GridBagConstraints(); 
      gbc.gridwidth = GridBagConstraints.REMAINDER; 
      add(btn, gbc); 
      add(field, gbc); 
     } 

    } 

} 

好吧,所有這些都是檢查最後一次點擊時間之間的差異,如果它小於2秒,它會更新count,指示要使用的當前值,否則將count重置爲0,默認值爲回到正常的鑰匙...

btn.addActionListener(new ActionListener() { 
    private long lastClick = -1; 
    private int count; 
    private String[] value = {"1", "A", "B", "C"}; 
    @Override 
    public void actionPerformed(ActionEvent e) { 
     long now = System.currentTimeMillis(); 
     if (now - lastClick < 2000) { 
      count++; 
      if (count >= value.length) { 
       count = 0; 
      } 
     } else { 
      count = 0; 
     } 
     field.setText(value[count]); 
     lastClick = System.currentTimeMillis(); 
    } 
}); 
+0

啊好吧好吧,我現在完全得到它 - 這樣一個愚蠢的錯誤,我做了!..是的,這正是我想要做的,你是一個明星,非常感謝你! :) – MET 2015-02-12 16:48:44

+0

但我不gey爲什麼lastClick發起到-1,它會工作相同,如果不是,對不對? – MET 2015-02-12 16:54:32

+0

這是個人的事情,我傾向於將其設置爲-1,所以我可以檢查它是否設置,在這不是必需的 – MadProgrammer 2015-02-12 20:04:07