Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从数据库和setColor中获取多个JButton的值_Java_Sql - Fatal编程技术网

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

}