跟踪哪个对象触发了一个共同的事件

时间:2011-11-22 12:00:22

标签: java swing awt

我有一组子菜单的公共事件处理程序,例如4个菜单,每个菜单中有4个子菜单。我想要的是跟踪每个子菜单被点击的次数,为此我在主类中使用整数数组作为每个子菜单(用应用程序范围声明)的计数器。在GUI退出后,我需要将此数组中的值写入文件。如何(更重要的是在代码中的哪个位置)我这样做?我的数组显然大小为16,需要初始化为零(我再次在哪里这样做?) 我是Java的新手,但我猜我需要做些什么,

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

3 个答案:

答案 0 :(得分:1)

首先,在初始化菜单项的类中,需要声明一个整数数组。这些将自动初始化为0:

private int[] counters = new int[16];

然后,每次初始化菜单项时,必须向项目添加一个监听器,以增加相应的计数器元素:

private class CounterIncrementActionListener implements ActionListener {
    private int index;

    private CounterIncrementActionListener(int index) {
        this.index = index;
    }

    @Override 
    public void actionPerformed(ActionEvent e) {
        counters[index] = counters[index] + 1;
    }
}

...
firstItem.addActionListener(new CounterIncrementActionListener(0));
secondItem.addActionListener(new CounterIncrementActionListener(1));
...

现在,为了能够在关闭框架时将计数器数组保存到文件中,您需要向框架添加一个窗口监听器:

frame.addWindowListener(new WindowAdapter() {

    @Override
    public void windowClosing(WindowEvent e) {
        saveCounters();
        System.exit(0);
    }
}

答案 1 :(得分:0)

将其传递给活动。许多GUI都有一个ActionCommand类型属性,您可以使用所需的任何字符串进行标记。您可以使用它将信息传递到您的活动中。

答案 2 :(得分:0)

主要来自Oracle - How to Write Window Listeners

  • 您需要使用setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE)
  • 您需要添加一个windowListener
  • 您需要覆盖windowListener
  • 的windowClosing()方法

e.g:

this.addWindowListener(new java.awt.event.WindowAdapter() {
   public void windowClosing(java.awt.event.WindowEvent e) {
     //Save your Array here
   }
});