Java 如何从数据库和setColor中获取多个JButton的值
我在数据库中有一个表Java 如何从数据库和setColor中获取多个JButton的值,java,sql,Java,Sql,我在数据库中有一个表 TableRoom - NoRoom - Status 我有 room 101, 102, 103, 104, 105, 201, 202, 203, 204, 205 我的问题是如何调用数据库并指定按钮的颜色。如果房间的状态充满按钮,则按钮应为红色;如果房间的状态为空,则按钮应为绿色 这是霉菌 JButton [] arr = new JButton[10]; ......... if(r.next()){ status = r.getSt
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);
}
}
}
JButton[]arr=新JButton[10];
.........
if(r.next()){
status=r.getString(“status”);
noRoom=r.getString(“noRoom”);
对于(inti=0;i,首先创建房间的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;
}
}
try {
List<Room> rooms = getRooms();
for (Room room : rooms) {
updateRoomStatus(room);
}
} catch (SQLException exp) {
exp.printStackTrace();
}
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);
}
}
}
例如,这允许您将与单个房间相关的所有信息包含到单个类中。此外,通过使用equals
和hashcode
,我们不需要为每个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;
}
接下来,您需要初始化这些值
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();
}
现在,这是一个非常简单的例子,一个更复杂的例子是维护房间
的单个实例,并从数据库中的数据进行更新。这意味着,如果要更改任何给定的房间
的状态,该更改将反映在对房间
的所有引用中
此外,这假设在初始化数据和更新数据之间房间的数量不会发生变化,这似乎是有道理的,但值得指出
查看和了解更多的细节
你有什么问题吗?调用数据库?确定房间的状态?改变按钮的颜色?你的代码的结构是什么?按钮是如何管理的?如何链接到一个特定的房间?考虑提供一个演示你的问题。这是N。这不是一个代码转储,而是一个你正在做的事情的例子,它突出了你所遇到的问题。这将减少混乱和更好的响应
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);
}
}
}