如何动态地将 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你只有一个值(一行),因为
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 只接受一个数组Vector
或ListModel
作为参数。 @user3377703 所以你需要将nameList.toArray()
传递给JList
。顺便说一句 +1 的概念。
基本上做你在 PeterMMM 的回答中找到的事情,但使用 ArrayList以上是关于如何动态地将 db 值放入 jlist 中?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 DB2 sql 代码动态地将列转置为表的行,其中列可能会随着时间的推移而增加且无需更改代码?
java swing 中的列表框JList如何在程序中动态的添加和删除元素