如何动态地将db值放入jlist?

时间:2014-03-13 15:44:29

标签: java swing jdbc jlist

您好我有一个j列表,我想要放置一些数据库值,并希望自动创建jlist但是当我尝试这样做时,我无法实现这一点,当我从数据库到jlist只有一个值 我怎么能做到这一点?

这是我的代码

   public class RootSelection1  {
    private String connectionURL = "jdbc:mysql://localhost:3306/Trainpis";
    private String s1="";
    private String s2="";
    private final Map<String, ImageIcon> imageMap;

    public RootSelection1() {

            try{
                 Class.forName("com.mysql.jdbc.Driver");
                 Connection conn = DriverManager.getConnection(connectionURL, "root", "");
                 Statement st=conn.createStatement();
                 ResultSet rs=st.executeQuery("Select route,fromr from route");
                 while(rs.next()){
                    s1=rs.getString("route");
                    s2=rs.getString("fromr");
                 }
            } catch(Exception e) {
            }

            String[] nameList={s1,s2};
            imageMap = createImageMap(nameList);
            JList list = new JList(nameList);
            list.setCellRenderer(new MarioListRenderer());

            JScrollPane scroll = new JScrollPane(list);
            scroll.setPreferredSize(new Dimension(300, 400));

            JFrame frame = new JFrame();
            frame.add(scroll);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
              frame.setExtendedState(JFrame.MAXIMIZED_BOTH); 
            frame.pack();
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);
        }

        public class MarioListRenderer extends DefaultListCellRenderer {

            Font font = new Font("helvitica", Font.BOLD, 24);

            @Override
            public Component getListCellRendererComponent(
                    JList list, Object value, int index,
                    boolean isSelected, boolean cellHasFocus) {

                JLabel label = (JLabel) super.getListCellRendererComponent(
                        list, value, index, isSelected, cellHasFocus);
                label.setVerticalTextPosition(JLabel.TOP);
                label.setHorizontalTextPosition(JLabel.CENTER);
                label.setBorder(new MatteBorder( 0, 0, 2, 0, Color.GRAY));
                label.setIcon(imageMap.get((String) value));
                label.setHorizontalTextPosition(JLabel.RIGHT);
                label.setFont(font);
                return label;
            }
        }

        private Map<String, ImageIcon> createImageMap(String[] list) {
            Map<String, ImageIcon> map = new HashMap<>();
            for (String s : list) {
                map.put(s, new ImageIcon("E:\\SOFTWARE\\TrainPIS\\res\\drawable\\yellow.png"));
            }
            return map;
        }

         public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    new RootSelection1 ();

                   // ComboboxDemo cb=new ComboboxDemo();
                    //System.out.println(cb.a);
                }
            });
        }
    }

提前致谢

1 个答案:

答案 0 :(得分:2)

你只有一个值(一行),因为

while(rs.next()){
    s1=rs.getString("route");
    s2=rs.getString("fromr");
    }

已经通过整个记录集和s1循环,s2保存记录集中最后一行的值。

尝试这样的事情:

        List<String> nameList = new ArrayList<String>();
        try{
             Class.forName("com.mysql.jdbc.Driver");
             Connection conn = DriverManager.getConnection(connectionURL, "root", "");
             Statement st=conn.createStatement();
             ResultSet rs=st.executeQuery("Select route,fromr from route"
             while(rs.next()){
                String s1=rs.getString("route");
                String s2=rs.getString("fromr");
                nameList.add(s1+" "+s2);
             }
        } catch(Exception e) {
        }

        JList list = new JList(nameList.toArray());