actionPerformed在实现ActionListener时未触发

时间:2014-05-09 11:51:11

标签: java

我有以下代码,我试图捕捉一个actionPerformed事件,但它永远不会到达那里。可能是什么原因?

public class NotePanel extends JPanel implements ActionListener {

    /**
     *
     */
    private static final long serialVersionUID = 6562595937363664309L;

    // hash table
    private Hashtable<Integer, String> hash;

    // comboboxes
    JComboBox day, month, year;

    // text area
    JTextArea textArea;

    public NotePanel(JTextArea textArea) {
        hash = new Hashtable<Integer, String>();
        this.textArea = textArea;
        addComponents();
    }

    private void addComponents() {
        setLayout(new GridLayout(2, 3));
        // add comboboxes
        Integer[] dates = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31};
        day = new JComboBox(dates);
        add(day);
        Integer[] months = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
        month = new JComboBox(months);
        add(month);
        year = new JComboBox();
        year.setEditable(true);
        add(year);
        // add get and set buttons
        JButton saveButton = new JButton("Save Memo");
        saveButton.setActionCommand("Save");
        JButton getButton = new JButton("Get Memo");
        getButton.setActionCommand("Get");
        add(saveButton);
        add(getButton);
    }

    @Override
    public void actionPerformed(ActionEvent evt) {
        String cmd = evt.getActionCommand();
        Date date = new Date(getNumberFromCombo(day), getNumberFromCombo(month), getNumberFromCombo(year));
        int hashCode = date.hashCode();
        if (cmd.equals("Get")) {
            if (hash.containsKey(hashCode)) {
                textArea.setText(hash.get(date.hashCode()));
            } else {
                textArea.setText("");
            }
        } else if (cmd.equals("Save")) {
            hash.put(hashCode, textArea.getText());
        }
    }
}

主要很简单:

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

private static void createAndShowGUI(){
    JFrame f = new JFrame("Maman 14 - Part 2");
    f.setResizable(false);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setLayout(new GridLayout(2,1));
    // add text area
    JTextArea textArea = new JTextArea();
    f.add(new NotePanel(textArea));
    f.add(textArea);

    f.pack();
    f.setFocusable(true);
    f.setVisible(true);
}   

感谢!!!

1 个答案:

答案 0 :(得分:2)

您必须在addComponents

的按钮中将您的面板注册为听众
saveButton.addActionListener(this);
getButton.addActionListener(this);