簡體   English   中英

我如何在Java中處理Jcombobox的按鍵事件

[英]How i handle keypress event for Jcombobox in java

我想將項目添加到JCombobox,該項目就是我在JCombobox中鍵入的要添加的項目。 此jCombox框是可編輯的。

我怎樣才能做到這一點。

好的,我嘗試為此JCombo框添加KeyPress事件,但不會重新放置

 private void jbcBOXKeyTyped(java.awt.event.KeyEvent evt) {

        if (evt.getKeyCode() == 13) {
            System.out.println("Keypress");
            jbcBOX.addItem(jbcBOX.getSelectedItem().toString());
        }
    }

舉一個簡短的例子,希望對您有所幫助。

基本上只是將ActionListener添加到JComboBox ,每當選擇或添加一個項目時,就會調用ActionListener ActionListener我們僅檢查是否有一個與當前選定項目匹配的項目,如果不匹配,則如果找到匹配項,則將該項目添加到JComboBox ,然后不執行任何操作:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;

public class EditableJComboBox {

    public EditableJComboBox() {
        initComponents();
    }

    private void initComponents() {
        JFrame frame = new JFrame("Editable JComboBox");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        String labels[] = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J"};
        final JComboBox comboBox = new JComboBox(labels);
        comboBox.setEditable(true);

        comboBox.addActionListener(new ActionListener() {
            private boolean found = false;

            @Override
            public void actionPerformed(ActionEvent actionEvent) {
                String s = (String) comboBox.getSelectedItem();
                for (int i = 0; i < comboBox.getItemCount(); i++) {
                    if (comboBox.getItemAt(i).toString().equals(s)) {
                        found = true;
                        break;
                    }
                }
                if (!found) {
                    System.out.println("Added: " + s);
                    comboBox.addItem(s);
                }
                found = false;
            }
        });

        frame.add(comboBox);

        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String args[]) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new EditableJComboBox();
            }
        });
    }
}

Combobox教程中對此進行了說明。 不需要臟的KeyListener並檢查Enter鍵。

  1. 您使組合框可編輯
  2. 您添加一個ActionListener ,當按下回車鍵時將觸發它
  3. 在您的ActionListener您可以更新模型

或者更確切地引用該教程

JComboBox patternList = new JComboBox(patternExamples);
patternList.setEditable(true);
patternList.addActionListener(this);

當用戶從菜單中選擇一個項目並且用戶鍵入Enter時,可編輯的組合框將觸發一個動作事件。 請注意,當用戶在組合框中輸入一個值時,菜單保持不變。 如果需要,您可以輕松編寫一個動作偵聽器,每次用戶鍵入一個唯一值時,該動作偵聽器就會在組合框的菜單中添加一個新項。

這甚至比說的還要糟糕-似乎(由於使用Netbeans)keyTyped等事件根本不會觸發。 我想象這里有很多人想知道為什么他們可以在JTextField上捕獲java.awt.event.KeyEvent.getKeyChar() ,但是將GUI Builder的核心部分(在Netbeans中)完全用於JComboBox,卻使他們一無所有!

在組合框上處理事件

...

盡管JComboBox繼承了為低級事件(例如焦點,鍵和鼠標事件)注冊偵聽器的方法, 但我們建議您不要在組合框上偵聽低級事件 原因如下:組合框是一個復合組件—它由兩個或多個其他組件組成。 組合框本身會觸發高級事件,例如動作事件。 它的子組件觸發低級事件,例如鼠標,鍵和焦點事件。 低級別事件和觸發它們的子組件與外觀有關。 為了避免編寫與外觀相關的代碼,您應該只偵聽復合組件(如組合框)上的高級事件。 有關事件的信息,包括有關高級別和低級別事件的討論,請參閱編寫事件偵聽器

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM