Java命令jlist按状态

时间:2013-06-29 04:14:05

标签: java swing jdbc icons jlist

我有一个小问题,我不知道如何按照从数据库中检索的状态对我的jlist进行排序。我希望按“在线”和“离线”排序,我的意思是在线计算机首先然后离线计算机,我现在有这个代码,它只是为jlist制作图标+文本

你能告诉我如何过滤/排序状态?

public void acx_pc(String query) {
    try {
        Statement st = con.createStatement();
        ResultSet rs = st.executeQuery(query);
        String comb;
        Map<Object, Icon> icons = new HashMap<>();
        ArrayList<String> pc_list = new ArrayList<>();
        int i = 0;


        while (rs.next()) {
            //Getting info from DB

            String pc_name = rs.getString("nombre_pc");
            String pc_ip = rs.getString("IP");
            String status = rs.getString("estado");
            //Setting text for the jList
            comb = pc_name + " - " + pc_ip;
            //Comparing Status
            switch (status) {
                case "online":
                    //This is just for rendering an image+text to Jlist
                    icons.put(comb, new ImageIcon(getClass().getResource("/Imagenes/com_on_30x30.png")));

                    break;
                case "offline":
                     //This is just for rendering an image to Jlist
                    icons.put(comb, new ImageIcon(getClass().getResource("/Imagenes/com_off_30x30.png")));
                    break;
            }
            //Adding info to ArrayList
            pc_list.add(i, comb);
            i++;

        }

        con.close();
        // Setting the list/text on Jlist
        Home.computer_jlist.setListData(pc_list.toArray());
        // create a cell renderer to add the appropriate icon
        Home.computer_jlist.setCellRenderer(new pc_cell_render(icons));

    } catch (Exception e) {
        System.out.println("Error aqui: " + e);

    }
}

我想做点什么(应该自动订购) http://imageshack.us/a/img27/9018/2mx1.png

而不是: http://imageshack.us/a/img407/346/e9r.png

1 个答案:

答案 0 :(得分:2)

您可以使用自定义Collections.sortComparator实用程序方法对pc_list进行排序。

然而,这可能是矫枉过正的。使用两个列表会更容易:

ArrayList<String> pc_list = new ArrayList<>();
ArrayList<String> pc_offline_list = new ArrayList<>();

// . . .

switch (status) {
    case "online":
        //This is just for rendering an image+text to Jlist
        icons.put(comb, new ImageIcon(getClass().getResource("/Imagenes/com_on_30x30.png")));
        pc_list.add(comb);
        break;
    case "offline":
         //This is just for rendering an image to Jlist
        icons.put(comb, new ImageIcon(getClass().getResource("/Imagenes/com_off_30x30.png")));
        pc_offline_list.add(comb);
        break;
}

// . . .

pc_list.addAll(pc_offline_list);
Home.computer_jlist.setListData(pc_list.toArray());

所以你首先将离线的那些分开,然后将它们全部添加到你找到它们的最后一个。通过将它们分开来避免进行任何排序!

此外,add方法默认添加到结尾(追加),因此您会注意到我刚刚写了pc_list.add(comb)而不是pc_list.add(i, comb)