2015-01-16 3 views
1

Я долго искал, как написать KeyEvent, чтобы мои кнопки нажимали на кнопку ENTER key. Обратите внимание, что я использую файлы JavaFX и FXML.Как использовать KeyEvent в проекте JavaFX?

Проблема заключается в том, что при установке в текстовом поле onKeyTyped в файле FXML файлы FXML не принимают его. Он говорит Handle method not found. Он просто принимает ActionEvent метод, так что я попробовал этот код:

@FXML 
private void key (KeyEvent evt) throws IOException{ 
     if (evt.getCode() == KeyEvent.VK_ENTER){ 
     String az = text1.getText(); 
     //c.1 
     if(az.contains("1")){ 
      String hh = text11.getText(); 
      Socket socket = null; 
      InetSocketAddress isa = new InetSocketAddress (hh,80); 
     } 
    } 
} 

Поэтому, пожалуйста, может кто-нибудь мне помочь?

+1

Я был бы очень удивлен (и разочарован), если это было поведением кнопок в JavaFX по умолчанию. Я думаю, вам нужно просмотреть [Обработка событий JavaFX] (http://docs.oracle.com/javafx/2/events/jfxpub-events.htm) и [Использование элементов управления JavaFX UI] (http: // docs .oracle.com/JavaFX/2/ui_controls/button.htm). Я был бы очень удивлен, если что-то вроде 'button2.setOnAction (new EventHandler () {' не занималось как событием ключевого события, так и событием мыши, как и Swing ... – MadProgrammer

+0

Хорошо, поэтому, видимо, [Enter] не является ключом по умолчанию ... Попробуйте что-то вроде [this] (http://stackoverflow.com/questions/25758782/fire-buttons-onaction-with-enter-in-javafx) вместо – MadProgrammer

ответ

5

У вас есть несколько проблем с вашим кодом:

  1. Вы используете onKeyTyped вместо onKeyPressed. Для получения дополнительной информации visit this link

  2. Возможно, вы используете java.awt.event.KeyEvent, что не будет работать с JavaFX events. Попробуйте использовать javafx.scene.input.KeyEvent.

    Причина, почему я пришел к такому выводу, потому что JavaFX не поддерживает KeyEvent.VK_ENTER, но вместо того, чтобы иметь KeyCode.ENTER

Конкретный пример показан ниже, вы можете использовать то же самое, чтобы превратить его в FXML:

import javafx.application.Application; 
import javafx.event.EventHandler; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.input.KeyCode; 
import javafx.scene.input.KeyEvent; 
import javafx.scene.layout.BorderPane; 
import javafx.stage.Stage; 

public class ButtonExample extends Application { 

    @Override 
    public void start(Stage primaryStage) throws Exception { 
     BorderPane pane = new BorderPane(); 
     Button button = new Button("Press Me!"); 
     pane.setCenter(button); 
     Scene scene = new Scene(pane, 200, 200); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 

     button.setOnKeyPressed(new EventHandler<KeyEvent>() { 

      @Override 
      public void handle(KeyEvent event) { 
       if (event.getCode() == KeyCode.ENTER) { 
        System.out.println("Enter Pressed"); 
       } 
      } 
     }); 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
} 
Смежные вопросы