Apakah mungkin untuk mendeteksi ketika seseorang menekan Entersaat mengetik di JTextField di java? Tanpa harus membuat tombol dan mengaturnya sebagai default.
Apakah mungkin untuk mendeteksi ketika seseorang menekan Entersaat mengetik di JTextField di java? Tanpa harus membuat tombol dan mengaturnya sebagai default.
Jawaban:
Sebuah JTextField
dirancang untuk menggunakan ActionListener
hanya seperti JButton
ini. Lihat addActionListener()
metode JTextField
.
Sebagai contoh:
Action action = new AbstractAction()
{
@Override
public void actionPerformed(ActionEvent e)
{
System.out.println("some action");
}
};
JTextField textField = new JTextField(10);
textField.addActionListener( action );
Sekarang acara tersebut dijalankan saat Enterkunci digunakan.
Selain itu, manfaat tambahannya adalah Anda dapat membagikan pendengar dengan sebuah tombol meskipun Anda tidak ingin menjadikan tombol tersebut sebagai tombol default.
JButton button = new JButton("Do Something");
button.addActionListener( action );
Perhatikan, contoh ini menggunakan Action
, yang mengimplementasikan ActionListener
karena Action
merupakan API yang lebih baru dengan fitur tambahan. Misalnya Anda dapat menonaktifkan Action
yang akan menonaktifkan acara untuk bidang teks dan tombol.
JTextField function=new JTextField(8);
function.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
//statements!!!
}});
yang perlu Anda lakukan hanyalah menambahkanActionListener ke JTextField seperti di atas! Setelah Anda menekan Entertindakan akan dilakukan apa yang Anda inginkan pada pernyataan itu!
Tambahkan acara untuk KeyPressed
.
private void jTextField1KeyPressed(java.awt.event.KeyEvent evt) {
if(evt.getKeyCode() == KeyEvent.VK_ENTER) {
// Enter was pressed. Your code goes here.
}
}
KeyListeners
memiliki banyak kekurangan, yang diurus oleh KeyBindings
, seperti, terkait fokus, terkait salin / tempel, dan banyak lagi. Itu harus dihindari, untuk tugas-tugas sepele seperti yang ditanyakan di OP.
Apakah Anda ingin melakukan sesuatu seperti ini?
JTextField mTextField = new JTextField();
mTextField.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_ENTER){
// something like...
//mTextField.getText();
// or...
//mButton.doClick();
}
}
});
Pertama tambahkan perintah tindakan pada JButton atau JTextField dengan:
JButton.setActionCommand("name of command");
JTextField.setActionCommand("name of command");
Kemudian tambahkan ActionListener ke JTextField dan JButton.
JButton.addActionListener(listener);
JTextField.addActionListener(listener);
Setelah itu, tulis implementasi On You ActionListener
@Override
public void actionPerformed(ActionEvent e)
{
String actionCommand = e.getActionCommand();
if(actionCommand.equals("Your actionCommand for JButton") || actionCommand.equals("Your actionCommand for press Enter"))
{
//Do something
}
}
Jawaban lain (termasuk yang diterima) bagus, tetapi jika Anda sudah menggunakan Java8, Anda dapat melakukan hal berikut (dengan cara yang lebih singkat dan lebih baru):
textField.addActionListener(
ae -> {
//dostuff
}
);
Seperti jawaban yang diterima, Anda cukup bereaksi dengan ActionListener
, yang menangkap Enter-Key.
Namun, pendekatan saya memanfaatkan konsep fungsional yang diperkenalkan di Java 8.
Jika Anda ingin menggunakan tindakan yang sama misalnya untuk tombol dan JTextField, Anda dapat melakukan hal berikut:
ActionListener l = ae -> {
//do stuff
}
button.addActionListener(l);
textField.addActionListener(l);
Jika perlu penjelasan lebih lanjut, beri tahu saya!
Jika Anda ingin menyetel aksi tombol default di JTextField enter, Anda harus melakukan ini:
//put this after initComponents();
textField.addActionListener(button.getActionListeners()[0]);
Ini [0] karena sebuah tombol dapat memiliki banyak tindakan, tetapi biasanya hanya memiliki satu tindakan (ActionPerformed).
Untuk setiap bidang teks dalam bingkai Anda, aktifkan metode addKeyListener. Kemudian terapkan dan timpa metode keyPressed, seperti yang ditunjukkan orang lain. Sekarang Anda dapat menekan enter dari bidang mana pun di bingkai Anda untuk mengaktifkan tindakan Anda.
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_ENTER){
//perform action
}
}
public void keyReleased(KeyEvent e)
{
int key=e.getKeyCode();
if(e.getSource()==textField)
{
if(key==KeyEvent.VK_ENTER)
{
Toolkit.getDefaultToolkit().beep();
textField_1.requestFocusInWindow();
}
}
Untuk menulis logika untuk 'Enter press' JTextField
, lebih baik menyimpan logika di dalam keyReleased()
blok daripada keyTyped()
& keyPressed()
.
KeyListeners
Adalah tingkat yang terlalu rendah dari Swing
perspektif. Gunakan API yang dimaksudkan untuk digunakan dengan Swing
:-)
Cukup gunakan kode ini:
SwingUtilities.getRootPane(myButton).setDefaultButton(myButton);