[在DataBase onload中显示Jlist中的值] [Swing GUI和Database`
初始化代码:
public void initMethod()
{
try {
PortSelectionBox.addItem("COM1");
PortSelectionBox.addItem("COM2");
String[] listData={"sac : 1", "prl : 2","railway : 3", "railway : 4", "railway : 5", "prl : 6"};
//SourceJList.setListData(listData);
//get values from database and show in destlist
String query="Select * from `test`.`mapgroup`;";
System.out.println("query for selecttion: "+query);
ResultSet rs= con.SelectData(query);
ArrayList al = new ArrayList();
while(rs.next())
{
group=rs.getString("GroupName");
port=rs.getString("PortId");
System.out.println("grp: "+group);
System.out.println("port: "+port);
al.add(group);
}
//check if values present in db then show in dest list
//check which port is selected and then show value from database
if((PortSelectionBox.getSelectedItem().toString()).equals(port))
{
System.out.println("if condition satisfied");
}
for (String string : listData) {
SorceModel.addElement(string);
}
SourceJList.setModel(SorceModel);
} catch (ClassNotFoundException ex) {
Logger.getLogger(PanelSMS.class.getName()).log(Level.SEVERE, null, ex);
} catch (SQLException ex) {
Logger.getLogger(PanelSMS.class.getName()).log(Level.SEVERE, null, ex);
}
}
对combobox onchnage执行的操作:
private void PortSelectionBoxActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
//Show values in destList according to values stored in DB with there ports ,what to do here to map values with values stored in db
}
点击后对添加(>>)按钮执行的操作:
private void addBtnActionPerformed(java.awt.event.ActionEvent evt) {
try {
String port=PortSelectionBox.getSelectedItem().toString().trim();
String group=SourceJList.getSelectedValue().toString();
String temp=group;
String query="query to insert into db";
con.Ins_Upd_Del(query);
System.out.println("code to add: "+query);
System.out.println("data added");
DestModel.addElement(temp);
DestJList.setModel(DestModel);
SorceModel.removeElement(group);
System.out.println("done....");
} catch (ClassNotFoundException ex) {
Logger.getLogger(PanelSMS.class.getName()).log(Level.SEVERE, null, ex);
} catch (SQLException ex) {
Logger.getLogger(PanelSMS.class.getName()).log(Level.SEVERE, null, ex);
}
}
,
对删除(<<<>)按钮on on执行的操作:
private void removeBtnActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
try {
String port=PortSelectionBox.getSelectedItem().toString().trim();
String group=DestJList.getSelectedValue().toString();
String temp=group;
String query="query to delet";
System.out.println("code to remove: "+query);
con.Ins_Upd_Del(query);
System.out.println("data added");
SorceModel.addElement(temp);
SourceJList.setModel(SorceModel);
DestModel.removeElement(group);
System.out.println("done....");
} catch (ClassNotFoundException ex) {
Logger.getLogger(PanelSMS.class.getName()).log(Level.SEVERE, null, ex);
} catch (SQLException ex) {
Logger.getLogger(PanelSMS.class.getName()).log(Level.SEVERE, null, ex);
}
}
我完成了添加和删除按钮的工作。但现在我被困在视图部分。 我正在做的是我从arraylist填充第一个Jlist。当我从这个jlist添加任何元素时,它被添加到第二个JList并插入到DB中,类似于删除操作,它正在反向。
现在我需要的是,我已经在第二个Jlist中添加的那些值,它不应该在第一个Jlist中显示,反之亦然,在加载时,应该根据选择分别显示值。此处选择框也起着重要作用,因为我想根据所选值显示jlist中的值。
例如,如果我已将com1存储为" prl:1"然后它应该只在第二个Jlist onload中显示。 如果我想更新这个列表,那么它应该在DB中完成并同样显示。
我没有得到视图部分的流程。 我已经将所有内容存储在数据库中,我只是想映射事物并相应地显示它们。
请帮帮我...因为我无法接下来做什么... `] 2
答案 0 :(得分:2)
如果我正确理解您的问题,您希望初始化两个JList
组件才能正常工作。应该根据数据库填写目的地列表,对吧?这可以像这样工作(initMethod
方法的一部分):
// [...]
//get values from database and show in destlist
String query="Select * from `test`.`mapgroup`;";
System.out.println("query for selection: "+query);
ResultSet rs= con.SelectData(query);
String port = null;
ArrayList<String> groupsInDatabase = new ArrayList<>();
while(rs.next())
{
String group=rs.getString("GroupName");
port=rs.getString("PortId");
System.out.println("grp: "+group);
System.out.println("port: "+port);
groupsInDatabase.add(group);
}
//check if values present in db then show in dest list
DestModel = new DefaultListModel<>();
for (final String group : groupsInDatabase) {
DestModel.addElement(group);
}
DestJList.setModel(DestModel);
// [...]
源列表是否应填充listData
变量中的所有内容,但数据库中的组除外? (我已将listData
变量重命名为allGroups
以下。)此列表的初始化可能如下所示(也是initMethod
方法的一部分):
// [...]
SourceModel = new DefaultListModel<>();
for (String group : allGroups) {
if (!groupsInDatabase.contains(group)) {
SourceModel.addElement(group);
}
}
SourceJList.setModel(SourceModel);
// [...]
PortSelectionBox
的作用尚不清楚。 “COM1”和“COM2”是否与数据库中的某些记录相关(如“prl:1”和“prl:2”)?