选项卡式窗格中每个选项卡的GUI动作侦听器

时间:2012-03-14 14:20:51

标签: java swing jbutton actionlistener jtabbedpane

我对java很新,所以请跟我说,基本上,下面我为Arraylist房间的四个房间都有一个标签窗格,我在每个标签中创建按钮,具体取决于每个房间有多少个灯,如何将每个选项卡中的按钮与指定的房间相关联?那么当我点击Room 1选项卡中的灯光按钮时,事件监听器知道该按钮属于room1?

感谢任何帮助,谢谢。

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 个答案:

答案 0 :(得分:3)

首先,您需要将ActionListener添加到按钮,以便在单击按钮时调用它。

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

就区分单击哪个按钮而言,有两种主要方法可以解决这个问题。第一种是在getSource()上使用ActionEvent来获取对触发事件的对象的引用。您可以使用它来决定如何进一步继续。另一种选择是让MasterGUI 实施ActionListener。相反,为每个按钮创建一个唯一的ActionListener,以便立即知道调用时需要执行的操作。第一个选项使注册侦听器变得更容易,但在处理程序中需要更多工作来确定源。我更喜欢第二种方法。

答案 1 :(得分:2)

actionPerformed()中的ActionEvent将告诉您按下按钮的来源。所以你可以做两件事之一,你可以命名按钮(与按钮文本不同)指示房间的东西,或者你可以提供按钮调用的命令字符串,也可以从ActionEvent获得

查看JButton JavaDoc,它包含处理操作的链接,特别是支持的操作按钮。

它会使您的问题更加集中,因为您可以更好地了解如何实现目标。