2015-02-12 5 views
0

Я пытаюсь создать «немой» телефон и, следовательно, мне нужно создать буквенно-цифровую клавиатуру. Таким образом, сделка для каждой кнопки, если они многократно нажимаются в течение определенного времени (2 секунды), символы, которые они вводят, изменяются. Например, нажав 1 вход A, но если он снова нажат через 2 секунды, вход будет изменен на B, а затем, если он будет нажат через 2 секунды, вход будет C и так далее.Java Swing Буквенно-цифровая клавиатура

У вас уже есть вопрос, связанный именно с этим (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

+0

Но я не гей, почему lastClick инициирован до -1, он будет работать так же, если бы он не был, не так ли? – MET

+0

Это личное дело, я стараюсь установить его на -1, чтобы я мог проверить, установлен ли он, в этом он не нужен – MadProgrammer