gpt4 book ai didi

java - 选项卡式 Pane 中每个选项卡的 GUI 操作监听器

转载 作者:行者123 更新时间:2023-12-01 17:32:26 25 4
gpt4 key购买 nike

我对java相当陌生,所以请耐心等待,基本上,下面我为房间Arraylist中的四个房间中的每一个都有一个选项卡式 Pane ,并且我根据每个房间有多少盏灯在每个选项卡中创建按钮,如何将每个选项卡中的按钮与指定的房间关联起来?就像当我单击 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){

}

最佳答案

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

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

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

关于java - 选项卡式 Pane 中每个选项卡的 GUI 操作监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9703774/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com