JavaFx 2.2 tombol panah kiri ComboBox yang dapat diedit

ComboBox JavaFx yang dapat diedit berfungsi dengan baik tetapi tombol panah kiri diartikan sebagai Shift-TAB.

masukkan deskripsi gambar di sini

Seperti yang Anda lihat, fokus diatur ke ComboBox dan titik penyisipan berada di tengah bidangnya. Menekan tombol panah kiri memindahkan fokus ke kontrol pertama, TextField di sebelah kiri gambar saat menekan tombol panah kanan memindahkan penyisipan satu karakter ke kanan seperti yang diharapkan seperti di TextField mana pun.

Bagaimana cara menangkap peristiwa untuk mereproduksi perilaku Bidang Teks dalam Kotak Kombo yang dapat diedit?

Saya telah mencoba menangkap peristiwa penting melalui ComboBox.setOnKeyPressed() dan event.consume() tetapi tidak berhasil.

Berikut adalah program minimal untuk mereproduksi perilaku tak terduga ini:

@Override
public void start( Stage stage ) {
   stage.setTitle( "Editable ComboBox and left-arrow key" );

   ComboBox<String> cmbBx = new ComboBox<>();
   cmbBx.getItems().addAll( "A", "B", "C", "D", "E" );
   cmbBx.setMinWidth( 150 );
   cmbBx.setEditable( true );
   cmbBx.setOnKeyPressed( new EventHandler<KeyEvent>(){
      @Override public void handle( KeyEvent event ) {
         System.err.println( event );
         event.consume(); }}); // Consuming left arrow key is inoperant

   GridPane grid = new GridPane();
   grid.setVgap( 4 );
   grid.setHgap( 4 );
   grid.setPadding( new Insets( 4, 4, 4, 4 ));

   grid.add( new Label( "TextField:" ), 0, 0 );
   grid.add( new TextField()          , 1, 0 );
   grid.add( new Label( "ComboBox:" ) , 2, 0 );
   grid.add( cmbBx                    , 3, 0 );

   stage.setScene( new Scene( grid ));
   stage.show();
}

person Aubin    schedule 16.12.2012    source sumber
comment
Benar-benar? Perilaku yang aneh... Saya harus mengujinya di sini.   -  person ceklock    schedule 19.12.2012


Jawaban (1)


Jawabannya ada di sekitar pengikatan kunci seperti yang ditunjukkan dalam postingan SO ini "pengikatan kunci di javafx".

Kode ini menangkap acara LEFT:

  cmbBx.addEventFilter( KeyEvent.ANY, new EventHandler< KeyEvent >() {
     @Override public void handle(KeyEvent event ) {
        if( event.getCode() == KeyCode.LEFT ) {
           event.consume(); }}});

Dan itu saja, tapi saya terkejut karena tombol panah kiri memindahkan titik penyisipan seperti yang diharapkan, hanya perilaku yang tidak diinginkan yang dihapus. Mengapa?

person Aubin    schedule 16.12.2012
comment
Lihat Mengonsumsi Acara di akhir halaman ini: docs.Oracle.com/ javafx/2/events/processing.htm Mungkin ini jawaban dari pertanyaan Anda. Saya pikir ada berbagai jenis acara, mungkin tombol panah kiri juga merupakan InputEvent. - person ceklock; 19.12.2012