カスタムスイングコンポーネントと 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 キーを押したときにボタンを起動するにはどうすればよいですか?