Слушатели действий графического интерфейса для каждой вкладки в области вкладок - PullRequest
0 голосов
/ 14 марта 2012

Я довольно новичок в java, поэтому терпите меня, пожалуйста, в принципе, ниже, у меня есть панель с вкладками для каждой из четырех комнат в Arraylist комнат, и я создаю кнопки на каждой вкладке, в зависимости от того, сколько ламп имеет каждая комнатаКак можно связать кнопки на каждой вкладке с указанными номерами?Например, когда я нажимаю световую кнопку на вкладке «Комната 1», слушатель событий знает, что кнопка принадлежит комнате1?

Любая помощь приветствуется, спасибо.

import java.util.ArrayList;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class MasterGUI extends JFrame implements ActionListener{

public MasterGUI(){

}

public void DisplayFrame(){
    ArrayList<Rooms> rooms;
    rooms = Building.getRoomList();

    JFrame master = new JFrame("Solar Master Control Panel"); 
    master.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    Container content = master.getContentPane();
    content.setBackground(Color.lightGray);

    JTabbedPane tabbedPane = new JTabbedPane();
    JPanel tmpPanel;

    for(int x = 0; x < rooms.size(); x++){
        tmpPanel = new JPanel();
        String roomName = rooms.get(x).getName();
        int id = rooms.get(x).getId();
        tabbedPane.addTab(roomName + " Room " + id, tmpPanel);
    }

    for(int x = 0; x < rooms.size(); x++){
        for(int i = 0; i < rooms.get(x).roomLights.size(); i++){
            int num = i + 1;
            ((JPanel) tabbedPane.getComponentAt(x)).add(new JButton("Light" + num));
        }
    }

    master.add(tabbedPane, BorderLayout.CENTER);
    master.setSize(800, 600);
    content.add(tabbedPane);
    master.setVisible(true);
}

public void actionPerformed(ActionEvent e){

}  

Ответы [ 2 ]

3 голосов
/ 14 марта 2012

Прежде всего, вам нужно добавить ActionListener к кнопке, чтобы она вызывалась при нажатии кнопки.

...
JButton button = new JButton("Light" + num);
button.addActionListener(this);
((JPanel) tabbedPane.getComponentAt(x)).add(button);
...

Что касается различия между нажатием кнопки, то существуетОсновные способы решения этой проблемы.Первый - использовать getSource() на ActionEvent, чтобы получить ссылку на объект, вызвавший событие.Вы можете использовать это, чтобы решить, как вы хотите продолжить.Другой вариант - иметь MasterGUI , а не орудие ActionListener.Вместо этого, сделайте уникальный ActionListener для каждой кнопки, которая сразу знает, какое действие должно произойти, когда она была вызвана.Первый вариант облегчает регистрацию слушателей, но требует больше работы в обработчике для определения источника.Я предпочитаю второй метод.

2 голосов
/ 14 марта 2012

ActionEvent в actionPerformed () сообщит вам источник нажатой кнопки. Таким образом, вы можете сделать одну из двух вещей, вы можете присвоить кнопке имя (которое не совпадает с текстом кнопки), что-то указывающее на комнату, или вы можете предоставить командную строку, которую вызывает кнопка, которая также доступна из ActionEvent .

Проверьте JButton JavaDoc , он содержит ссылки на действия и, в частности, кнопку Поддерживаемые действия.

Он также немного лучше сфокусирует ваш вопрос, поскольку у вас будет более четкое представление о том, как вы хотите достичь своей цели.

...