JavaFx 2.2 ปุ่มลูกศรซ้าย ComboBox ที่แก้ไขได้

JavaFx ComboBoxes ที่แก้ไขได้ทำงานได้ดี แต่ปุ่มลูกศรซ้ายถูกตีความว่าเป็น Shift-TAB

ป้อนคำอธิบายรูปภาพที่นี่

ดังที่คุณเห็นว่าโฟกัสถูกตั้งค่าเป็น ComboBox และจุดแทรกอยู่ตรงกลางของฟิลด์ การกดปุ่มลูกศรซ้ายจะย้ายโฟกัสไปที่ตัวควบคุมแรก ส่วน TextField ทางด้านซ้ายของรูปภาพเมื่อกดปุ่มลูกศรขวาจะย้ายการแทรกอักขระไปทางขวาหนึ่งตัวตามที่คาดไว้ เช่นเดียวกับใน TextField ใดๆ

ฉันจะตรวจจับเหตุการณ์เพื่อสร้างพฤติกรรมของ TextField ใน ComboBox ที่แก้ไขได้อย่างไร

ฉันพยายามติดตามเหตุการณ์สำคัญผ่านทาง ComboBox.setOnKeyPressed() และ event.consume() แต่ไม่สำเร็จ

นี่เป็นโปรแกรมขั้นต่ำในการสร้างพฤติกรรมที่ไม่คาดคิดนี้ขึ้นมาใหม่:

@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 แหล่งที่มา
comment
จริงหรือ ช่างเป็นพฤติกรรมที่แปลกเสียจริง... ฉันต้องทดสอบสิ่งนี้ที่นี่   -  person ceklock    schedule 19.12.2012


คำตอบ (1)


คำตอบอยู่ที่การเชื่อมโยงคีย์ดังที่แสดงในโพสต์ SO นี้ "การเชื่อมโยงคีย์ใน javafx"

รหัสนี้จับเหตุการณ์ LEFT:

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

แค่นั้นเอง แต่ฉันแปลกใจเพราะปุ่มลูกศรซ้ายเลื่อนจุดแทรกตามที่คาดไว้ เฉพาะพฤติกรรมที่ไม่ต้องการเท่านั้นที่ถูกลบออก ทำไม

person Aubin    schedule 16.12.2012
comment
ดูการใช้กิจกรรมในตอนท้ายของหน้านี้: docs.oracle.com/ javafx/2/events/processing.htm บางทีนี่อาจเป็นคำตอบสำหรับคำถามของคุณ ฉันคิดว่ามีเหตุการณ์หลายประเภท บางทีปุ่มลูกศรซ้ายอาจเป็น InputEvent เช่นกัน - person ceklock; 19.12.2012