如何从数据库和setColor获取值到许多JButton

时间:2015-09-15 07:26:44

标签: java sql

我在数据库中有一个表

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);
 };

1 个答案:

答案 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;
    }

}
例如,

。这允许您将与单个房间相关的所有信息包含在一个类中。此外,通过使用equalshashcode,我们不需要跟踪每个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 AccessCollections Trail