2014-11-08 11 views
1

Прежде всего, спасибо, что нашли время, чтобы прочитать это. Это то, что я пытаюсь сделать:Создание блокнота в java с экранной клавиатурой, не привяжите его к области текста правильно

  • Текстовый редактор с несколькими вариантами.
  • кнопка для виртуальной клавиатуры. Мне удалось создать кнопки, также успешно добавлены все кнопки, однако у меня возникают трудности с привязкой каждой кнопки к моей текстовой области и каждым нажатием кнопки.
  • Не ищите ничего сложного и все другие аспекты приложения работают, как вы увидите на снимке экрана.
  • это бит кода относительно моей клавиатуры.

class KbListener implements ActionListener //kb function. 
    { 
     public void actionPerformed(ActionEvent e) //checking events. 
     { 
      keyboard = new JFrame("VK"); 
      keyboard.setSize(400,300);//setting initial size of app. 
      keyboard.setVisible(true);//making sure its active. 
      keyboard.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);//closes when the x is pressed. 
      JButton[] letter = new JButton[27]; 
      keyboard.setLayout(new GridLayout(3,9)); 

      for (int i = 0;i<27;i++) 
      { 

       letter[i] = new JButton(""+(char)('A'+ i)); 

       keyboard.add(letter[i]); 
       //up until this point all is fine. 
       letter[i].addActionListener = (new ActionListener()); 


         if(e.getSource() ==letter[A]) 
         textArea.append("A"); 



      } 

     } 


    } 

enter image description here

+1

Рассмотрите возможность повторной постановки своей основной проблемы немного более четко, отвечая на этот вопрос: «*** Где *** именно вы застряли?» –

+0

Кроме того, этот код компилируется ?? 'letter [i] .addActionListener = (новый ActionListener());' ?? –

+0

Задерживается при нажатии кнопок типа «A» после нажатия, также нет, он не компилируется, поэтому «// до тех пор, пока эта точка не будет работать должным образом», второй, я прокомментирую это, отлично работает. – MHP

ответ

4

Вам нужно создать строку, которая используется в кнопке и используется в его слушателем как, что-то подобное,

for (int i = 0; i < 27; i++) { 

    final String buttonText = String.valueOf((char) ('A' + i)); 
    letter[i] = new JButton(buttonText); 

    keyboard.add(letter[i]); 
    letter[i].addActionListener(new ActionListener() { 

     @Override 
     public void actionPerformed(ActionEvent e) { 
      textArea.append(buttonText); 
     } 
    }); 

    } 

Примечание что buttonText должен быть окончательным, чтобы он был доступен внутри анонимного внутреннего класса ActionListener.

Также подумайте об избежании магических чисел. Например, вы могли бы сделать

for (int i = 0; i <= (int)('Z' - 'A'); i++) { 

или

int i = 0; 
    for (char myChar = 'A'; myChar <= 'Z'; myChar++) { 
    final String btnText = String.valueOf(myChar); 
    letter[i] = new JButton(btnText); 

    keyboard.add(letter[i]); 
    letter[i].addActionListener(new ActionListener() { 

     @Override 
     public void actionPerformed(ActionEvent e) { 
      textArea.append(btnText); 
     } 
    }); 
    i++; 
    } 

Редактировать
Другой и, возможно, лучший способ сделать это состоит в использовании действия, а не ActionListeners. Например, ...

//.... 
     int i = 0; 
     for (char myChar = 'A'; myChar <= 'Z'; myChar++) { 
     final String btnText = String.valueOf(myChar); 
     MyKeyBoardAction action = new MyKeyBoardAction(btnText); 
     letter[i] = new JButton(action); 
     i++; 
     } 
    } 

    private class MyKeyBoardAction extends AbstractAction { 
     public MyKeyBoardAction(String name) { 
     super(name); 
     } 

     @Override 
     public void actionPerformed(ActionEvent e) { 
     textArea.append(getValue(NAME).toString()); 
     } 
    } 

Вы также спросить о космическом характере,

делать и знаю, как добавить пробел в коде, а?

Это не сработает с вашим циклом for, но может быть добавлено самостоятельно.

Кроме того,

но почему избегают числа?

Потому что легко исправить ошибки, если вы используете «магические» цифры, которые не имеют смысла. Кроме того, используя константы, переменные, а не жестко закодированные числа, ваши переменные делают ваш код самокомментирующим.

+0

Знаешь, я могу обнять тебя прямо сейчас, ты не понимаешь, как долго я застрял на этом, большое спасибо :) – MHP

+0

, если вы не против, вы знаете, как добавить пробел в код также? или мне нужно делать это на отдельной территории? – MHP

+0

жаль, что вы беспокоитесь, но почему бы избежать чисел? (Я изучаю Java самостоятельно, пытаясь понять каждый бит, с которым я сталкиваюсь ^^) – MHP

1

Почему бы не создать прямой прослушиватель действий?

letter[i].addActionListener = (new ActionListener() { 
    public void onClick(View view) { 
     textArea.append(""+(char)('A'+ i));  
    } 
); 

 Смежные вопросы

  • Нет связанных вопросов^_^