0

カスタムスイングコンポーネントと JTextfield および JButton を持つ JFrame があります。JButton はデフォルトのボタンに設定されています。テキストフィールドがフォーカスされた瞬間にEnterキーを押すと、ボタンがトリガーされます。しかし、フォーカスボタンのカスタムコンポーネントがトリガーされない瞬間にEnterキーを押すと。

package org.laki.test;

import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.FlowLayout;
import javax.swing.JComboBox;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;

public class TestFrame extends JFrame {
private JTextField textField;
public TestFrame() {
    getContentPane().setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));

    textField = new JTextField();
    getContentPane().add(textField);
    textField.setColumns(10);

    ComboBox comboBox = new ComboBox();
    comboBox.addItem("lakshman");
    comboBox.addItem("tharindu");
    comboBox.addItem("Ishara");
    getContentPane().add(comboBox);

    JButton btnNewButton = new JButton("Test");
    btnNewButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            System.out.println("enter is hitting...!!!");
        }
    });
    getContentPane().add(btnNewButton);
    this.rootPane.setDefaultButton(btnNewButton);
}

private class ComboBox extends JComboBox<String>
{
  private static final long serialVersionUID = 10000012219553L;

  @Override
  public void processKeyEvent(final KeyEvent event)
  {
    if ((event.getKeyCode() == KeyEvent.VK_DOWN) ||
        (event.getKeyCode() == KeyEvent.VK_SPACE))
    {
             doSomthing();
    }
    else if(event.getKeyCode() == KeyEvent.VK_ENTER)
    {
        //I added this to capture the enter event
    }
  }
}
public static void main(String[] args) {
    TestFrame testframe = new TestFrame();
    testframe.setSize(300, 400);
    testframe.setVisible(true);
}

 }

カスタム コンポーネントで特別なイベントを実行するため、processKeyEvent メソッドを削除できません。カスタム コンポーネントのフォーカスの瞬間に Enter キーを押したときにボタンを起動するにはどうすればよいですか?

4

1 に答える 1

0

カスタム コンポーネントがJComponent.processKeyEvent()をオーバーライドし、親の実装を呼び出せない可能性があります。チェックし、そうでない場合は、次を使用してキーイベントを親に渡します

super.processKeyEvent(event);
于 2013-10-16T05:15:17.037 に答える