gpt4 book ai didi

java - 如何从数据库获取值并为多个 JButton 设置颜色

转载 作者:行者123 更新时间:2023-11-30 07:56:40 26 4
gpt4 key购买 nike

我的数据库中有 1 个表

TableRoom
- NoRoom
- Status

我有

room 
101,
102,
103,
104,
105,
201,
202,
203,
204,
205

我的问题是如何调用数据库并指定按钮的颜色。如果房间状态已满,按钮应为红色,如果房间状态为空,按钮应为绿色

这个我的代码

JButton [] arr = new JButton[10];    
.........

if(r.next()){
status = r.getString("status");
noRoom = r.getString("noRoom");
for(int i=0; i<10; i++){
if (arr[i].getActionCommand().equals(noRoom)){
r.beforeFirst();
while(r.next()){
arr[i].setBackground(Color.red);
}
s.close();
c.close();
} else {
arr[i].setBackground(Color.green);
}
}
}

最佳答案

首先创建 Room 的 POJO...类似...

public class Room {

private final int roomNumber;
private final boolean status;

public Room(int roomNumber, boolean status) {
this.roomNumber = roomNumber;
this.status = status;
}

public int getRoomNumber() {
return roomNumber;
}

public boolean isOccupied() {
return status;
}

@Override
public int hashCode() {
int hash = 7;
hash = 89 * hash + this.roomNumber;
return hash;
}

@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final Room other = (Room) obj;
if (this.roomNumber != other.roomNumber) {
return false;
}
return true;
}

}
例如。这允许您将与单个房间相关的所有信息包含到一个类中。此外,通过使用 equalshashcode,我们不需要跟踪每个 Room 对象的单个实例,但可以有多个实例,但它们等同于同一件事,这在你之后会更有意义......

创建一个“通用”实用方法来加载房间

protected List<Room> getRooms() throws SQLException {
Connection con = null;
List<Room> rooms = new ArrayList<>(25);
try (PreparedStatement stmt = con.prepareStatement("select * from TableRoom")) {
try (ResultSet rs = stmt.executeQuery()) {
while (rs.next()) {
Room room = new Room(rs.getInt("NoRoom"), rs.getBoolean("Status"));
rooms.add(room);
}
}
}
return rooms;
}

这一切所做的就是查询数据库,将数据加载到一系列 Room 中并返回一个 List,很好。现在,当您想要检查数据库时,只需调用此方法即可获取 RoomList

接下来,您需要某种方式来链接房间及其按钮,一个简单的 map 就足够了......

private Map<Room, JButton> buttons;

接下来,您需要初始化这些值...

    buttons = new HashMap<>(25);

try {
List<Room> rooms = getRooms();
for (Room room : rooms) {
JButton btn = new JButton(Integer.toString(room.getRoomNumber()));
buttons.put(room, btn);
updateRoomStatus(room);
// Add button to UI as required
}
} catch (SQLException exp) {
exp.printStackTrace();
}

现在,当您想要更新按钮的状态时,您只需执行以下操作...

    try {
List<Room> rooms = getRooms();
for (Room room : rooms) {
updateRoomStatus(room);
}
} catch (SQLException exp) {
exp.printStackTrace();
}

最后,您需要一个简单的实用方法,当提供 Room 时,该方法可以更新关联按钮的状态,例如...

protected void updateRoomStatus(Room room) {

JButton btn = buttons.get(room);
if (btn != null) {
if (room.isOccupied()) {
btn.setBackground(Color.RED);
} else {
btn.setBackground(Color.GREEN);
}
}

}

现在,这是一个非常简单的示例,更复杂的示例将让您维护 Room 的单个实例并根据数据库中的数据更新它。这意味着,如果您要更改任何给定 Room 的状态,该更改将反射(reflect)在您对该 Room 的所有引用中。

此外,这假设房间数量在初始化数据和更新数据之间不会发生变化,这似乎有道理,但值得指出。

看看JDBC Database AccessCollections Trail了解更多详情

关于java - 如何从数据库获取值并为多个 JButton 设置颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32580120/

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