Отслеживание того, какой объект вызывает общее событие - PullRequest
0 голосов
/ 22 ноября 2011

У меня есть общий обработчик событий для набора подменю, скажем что-то вроде 4 меню и 4 подменю в каждом. Я хочу отслеживать, сколько раз щелкнуло каждое подменю, и для этого я использую целочисленный массив в качестве счетчика для каждого подменю (объявленного в области приложения) в основном классе. Мне нужно записать значения в этом массиве в файл после выхода из GUI. Как (и что более важно, где в коде) мне это сделать? Мой массив, очевидно, имеет размер 16 и должен быть инициализирован до нуля (опять же, где я могу это сделать?) Я новичок в Java, но думаю, мне нужно что-то с этим сделать,

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

Ответы [ 3 ]

1 голос
/ 22 ноября 2011

Во-первых, в классе, который инициализирует пункты меню, вам нужно объявить массив целых чисел. Они будут автоматически установлены в 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);
    }
}
0 голосов
/ 22 ноября 2011

В основном из Oracle - Как писать оконные слушатели

  • Вам нужно использовать setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE)
  • , вам нужно добавить WindowListener
  • Вам необходимо переопределить метод windowClosing () для windowListener

например:

this.addWindowListener(new java.awt.event.WindowAdapter() {
   public void windowClosing(java.awt.event.WindowEvent e) {
     //Save your Array here
   }
});
0 голосов
/ 22 ноября 2011

Передайте это событие.Многие GUI имеют свойство типа ActionCommand, которое можно пометить любой строкой, которую вы хотите.Вы можете использовать это для передачи информации в ваше мероприятие.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...