Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Apply keyEvent to a method

I created this method:

public void comboS() {

    ResultSet rset = null;
    String sch = ((JTextField) ComboItemName.getEditor().getEditorComponent()).getText();
    try {
        rset = new JDBC.DB().getData("SELECT * FROM item_reg WHERE id LIKE '" + sch + "%';");
    } catch (Exception e) {
        System.out.println(e);
    }
    ComboItemName.removeAllItems();
    try {
        while (rset.next()) {
            String item = rset.getString("id");
            ComboItemName.addItem(item);
        }
    } catch (SQLException ex) {
        Logger.getLogger(jfilechooser.class.getName()).log(Level.SEVERE, null, ex);
    }
    System.out.println(sch);
    ComboItemName.setSelectedItem(null);
    ComboItemName.setPopupVisible(true);
    ((JTextField) ComboItemName.getEditor().getEditorComponent()).setText(sch);

}

I call this method in actionPerformed of the JComboBox(ComboItemName)..When I type HDD and hit enter it shows all the ids of hard disks in database..But I want this to be appear while I typing HDD.I think for that a keyEvent should be apply to the method like this.

public void comboS(java.awt.event.KeyEvent evt)

But I don't know how to call this method and where in combo box.give me some help for this.thanks. Like this

enter image description here

like image 227
JLink Avatar asked Aug 22 '26 04:08

JLink


2 Answers

Use DocumentListener on your editor component for that purposes, here is example with that:

import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.text.BadLocationException;
import javax.swing.text.JTextComponent;

public class Example extends JFrame {


    public Example() {
        JComboBox comboBox = new JComboBox(new String[]{"1","2"});
        comboBox.setEditable(true);
        ((JTextComponent)comboBox.getEditor().getEditorComponent()).getDocument().addDocumentListener(new DocumentListener() {

            @Override
            public void removeUpdate(DocumentEvent arg0) {
                validateHDD(arg0);
            }

            @Override
            public void insertUpdate(DocumentEvent arg0) {
                validateHDD(arg0);
            }

            @Override
            public void changedUpdate(DocumentEvent arg0) {
                validateHDD(arg0);
            }

            private void validateHDD(DocumentEvent arg0) {
                try {
                    String text = arg0.getDocument().getText(0, arg0.getDocument().getLength());
                    if(text.equals("HDD")){
                        System.out.println("HDD entered");
                        //call your method here
                    }
                } catch (BadLocationException e) {
                    e.printStackTrace();
                }
            }

        });
        add(comboBox);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                Example frame = new Example();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }
}

validateHDD validate if you entered HDD into editor of JComboBox, and then executes some logic if it is true.

like image 103
alex2410 Avatar answered Aug 24 '26 18:08

alex2410


To attach a KeyListener on a ComboBox, first of all your Combo must be editable.

    jComboBox1.setEditable(true);

Then just attach the KeyListener like this:

    jComboBox1.getEditor().getEditorComponent().addKeyListener(new KeyListener() {
        @Override
        public void keyTyped(KeyEvent e) {
            System.out.println(e.getKeyChar() + " KEY_TYPED DETECTED. \n");
        }
        @Override
        public void keyPressed(KeyEvent e) {
            System.out.println(e.getKeyChar() + " KEY_PRESS DETECTED. \n");
        }
        @Override
        public void keyReleased(KeyEvent e) {
            System.out.println(e.getKeyChar() + " KEY_RELEASE DETECTED. \n");
        }
    });

enter image description here

As simple as that :)

UPDATE

As @alex2410 spotted, it would be best to implement this with DocumentListener instead. Here is how to:

    final JTextComponent tc = (JTextComponent) jComboBox1.getEditor().getEditorComponent();
    tc.getDocument().addDocumentListener(new DocumentListener() {
        @Override
        public void insertUpdate(DocumentEvent e) {
            System.out.println("Combo Value is: " + tc.getText() + " . \n");
        }

        @Override
        public void removeUpdate(DocumentEvent e) {
            System.out.println("Combo Value is: " + tc.getText() + " . \n");
        }

        @Override
        public void changedUpdate(DocumentEvent e) {
            System.out.println("Combo Value is: " + tc.getText() + " . \n");
        }
    });

enter image description here

As a side note, please stick to Java code Conventions

like image 45
MaVRoSCy Avatar answered Aug 24 '26 18:08

MaVRoSCy