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

Java 选项卡式窗格中每个选项卡的GUI操作侦听器,java,swing,jbutton,actionlistener,jtabbedpane,Java,Swing,Jbutton,Actionlistener,Jtabbedpane,我对java相当陌生,所以请耐心听我说,基本上,下面我为rooms Arraylist中的四个房间中的每个房间都有一个选项卡式窗格,我在每个选项卡中创建按钮,具体取决于每个房间有多少灯光,如何将每个选项卡中的按钮与指定的房间关联?。就像我在room1选项卡中单击light按钮时,事件侦听器知道该按钮属于room1 谢谢你的帮助 import java.util.ArrayList; import java.awt.*; import javax.swing.*; import java.awt.

我对java相当陌生,所以请耐心听我说,基本上,下面我为rooms Arraylist中的四个房间中的每个房间都有一个选项卡式窗格,我在每个选项卡中创建按钮,具体取决于每个房间有多少灯光,如何将每个选项卡中的按钮与指定的房间关联?。就像我在room1选项卡中单击light按钮时,事件侦听器知道该按钮属于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){

}  
import java.util.ArrayList;
导入java.awt.*;
导入javax.swing.*;
导入java.awt.event.*;
公共类MasterGUI扩展JFrame实现ActionListener{
公共MasterGUI(){
}
公共void DisplayFrame(){
ArrayList房间;
房间=Building.getRoomList();
JFrame master=新JFrame(“太阳能主控制面板”);
master.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
容器内容=master.getContentPane();
内容。背景(颜色。浅灰色);
JTabbedPane tabbedPane=新的JTabbedPane();
JPanel-tmpPanel;
对于(int x=0;x
首先,您需要将
ActionListener
添加到按钮,以便在单击按钮时调用该按钮

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

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

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

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

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

actionPerformed()中的ActionEvent将告诉您按钮按下的源。因此,您可以执行以下两种操作之一:命名按钮(与按钮文本不同)指示房间的内容,或者您可以提供按钮调用的命令字符串,该字符串也可从ActionEvent获得

查看,它有处理操作的链接,特别是支持的按钮操作


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

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

查看,它有处理操作的链接,特别是支持的按钮操作


它还可以更好地关注您的问题,因为您可以更好地了解如何实现目标。

包装器类可以工作,或者
HashMap
。Java有一个调用。您也可以在首次创建面板时将按钮添加到面板中,而不是一个循环来创建面板,另一个循环来添加按钮。包装器类可以工作,或者
HashMap
。Java有一个调用。您还可以在首次创建面板时将按钮添加到面板中,而不是一个循环创建面板,另一个循环添加按钮。