我在数据库中有一个表
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);
}
}
}
我的问题是如何调用数据库并指定按钮的颜色。如果房间的状态被填满,按钮应该是红色的,如果房间的状态是空的,按钮应该是绿色的
这个mycode
function add (firstName, lastName, phoneNumber, email) {
var newContact = {
firstName: firstName,
lastName: lastName,
phoneNumber: phoneNumber,
email: email
};
contacts.push(newContact);
};
答案 0 :(得分:1)
首先创建一个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;
}
}
例如,。这允许您将与单个房间相关的所有信息包含在一个类中。此外,通过使用equals
和hashcode
,我们不需要跟踪每个Room
对象的单个实例,但可能有多个实例,但是等同于同一件事,这会让你更有意义......
创建一个&#34; general&#34;加载房间的实用方法
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
,很好。现在,当您想要检查数据库时,您只需调用此方法并获得List
Room
个
接下来,您需要一些方法来链接Room
及其按钮,一个简单的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
的状态,则该更改将反映在您对Room
的所有引用中。
此外,这假设在初始化数据和更新数据之间房间数量没有变化,这似乎是有道理的,但值得指出。
有关详细信息,请查看JDBC Database Access和Collections Trail