| 
 Duplicate :   
 | 
|
| 
 Duplicate :   
 | 
|
| 
 Relates :   
 | 
|
| 
 Relates :   
 | 
|
| 
 Relates :   
 | 
|
| 
 Relates :   
 | 
see RT-20144 which was closed as "not an issue"
this actually *is* an issue, and an inherently broken issue!
consider a german keyboard layout (it looks like this: http://www.onepoyle.net/german/support/KB_Germany.png, notice that the EQUALS "=" and PLUS "+" are different physical keys!)
also consider following application that displays KeyCodes as they are delivered in Swing:
=== KeyEventTest.java ====
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Locale;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.KeyStroke;
public class KeyEventTest {
  public static void main( String[] args ) {
    EventQueue.invokeLater(new Runnable() {
      public void run() {
        Locale.setDefault(Locale.GERMANY);
        (new KeyEventTest()).start();
      }
    });
  }
  private void start() {
    final JTextArea jta = new JTextArea();
    jta.addKeyListener(new KeyListener() {
      public void keyTyped( final KeyEvent e ) {
      }
      public void keyPressed( final KeyEvent e ) {
      }
      public void keyReleased( final KeyEvent e ) {
        System.out.println(KeyStroke.getKeyStroke(e.getKeyCode(), e.getModifiersEx()));
      }
    });
    final JScrollPane jsp = new JScrollPane(jta);
    jsp.setPreferredSize(new Dimension(640, 480));
    final JPanel contentPane = new JPanel(new BorderLayout());
    contentPane.add(jsp);
    final JFrame frame = new JFrame(KeyEventTest.class.getName());
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().add(contentPane);
    frame.pack();
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
  }
}
pressing the numpad + and the + left of return outputs the following:
pressed ADD
pressed PLUS
now consider the following equivalent javafx program:
=== KeyCodeTest.java ===
import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.input.KeyEvent;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
import java.util.Locale;
public class KeyCodeTest extends Application {
  public static void main(String[] args) {
    Locale.setDefault(Locale.GERMANY);
    launch(args);
  }
  @Override
  public void start(Stage primaryStage) {
    StackPane pane = new StackPane();
    final Label label = new Label("");
    pane.getChildren().add(label);
    pane.addEventHandler(KeyEvent.KEY_PRESSED, new EventHandler<KeyEvent>() {
      @Override
      public void handle(KeyEvent keyEvent) {
        label.setText(label.getText()+keyEvent.getText());
        System.out.println("pressed \""+keyEvent.getCode()+"\"");
      }
    });
    Scene scene = new Scene(pane, 500, 500);
    primaryStage.setScene(scene);
    primaryStage.show();
    pane.requestFocus();
  }
}
same input as above results:
pressed "ADD"
pressed "EQUALS"
note that the keycode indicates a key that actually has *nothing to do* with the key that was physically pressed!
the workaround that was suggested by Pavel Safrata on the issue that i linked above is incorrect, since there is no way to distinguish between the numpad "+" and the other "+" left of return.
  |