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

Posted

技术标签:

【中文标题】如何动态地将 db 值放入 jlist 中?【英文标题】:How to put db value in jlist dynamicly? 【发布时间】:2014-03-13 15:44:29 【问题描述】:

嗨,我有一个 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);
                
            );
        
    

提前致谢

【问题讨论】:

您的问题是您只存储了光标 rs 的一行(最后一行)。如果你想用 s1 和 s2 值存储多行,你需要一个二维数组来存储它。或者你使用类型为 string[]: ArrayList 的数组列表,每次你都将每个数组添加到列表中遍历你的结果集光标 【参考方案1】:

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

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

【讨论】:

我怎样才能得到 jlist 的所有值 你能告诉我我需要在哪里进行更改 你的代码对我来说很难理解。关键是您将完整加载的值列表作为模型传递给 JList。完成数据库后,请务必关闭打开的连接。 JList 只接受一个数组VectorListModel 作为参数。 @user3377703 所以你需要将nameList.toArray() 传递给JList。顺便说一句 +1 的概念。 基本上做你在 PeterMMM 的回答中找到的事情,但使用 ArrayList 而不仅仅是 ArrayList() 和 concat s1 和 s2。如果你连接它们,你不能单独引用 s1,s2。

以上是关于如何动态地将 db 值放入 jlist 中?的主要内容,如果未能解决你的问题,请参考以下文章

如何将数组中的数据放入标签Swift 3

如何在猫鼬中动态地将值推入对象的属性?

如何使用 DB2 sql 代码动态地将列转置为表的行,其中列可能会随着时间的推移而增加且无需更改代码?

java swing 中的列表框JList如何在程序中动态的添加和删除元素

如果您从一个视图控制器快速移动到另一个视图控制器,如何动态地将值添加到数组中?

javascript/jQuery:如何动态地将属性值转换为对象键? [复制]