Выберите все компоненты массива без цикла

StackOverflow https://stackoverflow.com/questions/1693436

  •  18-09-2019
  •  | 
  •  

Вопрос

Я сделал массив, полный JLabels и хотел бы добавить к ним слушателя.

Слушателю не нужно точно знать, на каком из них нажимали, именно это было. Есть ли способ добавить слушателя ко всему массиву вместо использования петли 'for ()'?

Спасибо за чтение.

Это было полезно?

Решение

Если ваши этикетки добавляются в контейнер (например, JPanel), вы можете добавить слушателя в этот контейнер и узнать, какой компонент находится в определенном месте.

JPanel panel = new JPanel();
panel.addMouseListener( whichOneListener );
f.setContentPane( panel );

В этом случае я использую мыслист, потому что это дает мне местоположение, куда пользователь щелкнул.

private static MouseListener whichOneListener = new MouseAdapter() {
    public void mouseClicked( MouseEvent e ) {
        JComponent c = ( JComponent ) e.getSource();
        JLabel l  = ( JLabel ) c.getComponentAt( e.getPoint() );
        System.out.println( l.getText() );
    }

};

И правильно печатает, какой компонент был нажат.

Полный исходный код здесь

Другие советы

Нет, нет из ящика, Афаик. Помимо использования глупых хаков, я думаю, вам, возможно, придется использовать для цикла, и это может быть 10 -линейный код, о чем беспокоиться.

Вы можете обернуть свой массив Jlabels в классе и реализовать свой собственный метод add (), который регистрирует слушателя при добавлении.

Таким образом, вам не придется повторять над ними потом ...

Вы можете зарегистрировать слушателя на JPanel (или любого компонента, в котором находятся кнопки), поэтому вам нужно написать только одного слушателя.

Если бы это был список jlabels, я бы предложил использовать Collection.foralldo - Метод, который позволяет применить одно и то же действие к группе объектов.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top