【发布时间】:2012-03-14 22:33:26
【问题描述】:
我对 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){
}
【问题讨论】:
-
一个包装类可以工作,或者一个
HashMap<JButton, Room>。 -
Java 有一个for-each loop,这意味着您不必执行所有
get(x)调用。您也可以在第一次创建面板时将按钮添加到面板,而不是一个循环来制作面板,另一个循环来添加按钮。
标签: java swing jbutton actionlistener jtabbedpane