我的代码从基础删除文章,但我不知道如何从JList中删除该项目。当我点击选中的确定按钮项目从sqlite base删除但我想从我的面板上的JList删除该项目。我试图调用方法updateList但它不起作用。这是我的代码。
public class ArticleTask2 extends JFrame {
private static final long serialVersionUID = -1058351261839501095L;
private static JPanel mainPanel = new JPanel();
private JButton button = new JButton("Delete");
private static JList<Article> choice;
public ArticleTask2() {
mainPanel.setLayout(new BorderLayout());
add(mainPanel);
updateList();
mainPanel.add(choice, BorderLayout.CENTER);
mainPanel.add(button, BorderLayout.SOUTH);
button.addActionListener(new MyListener());
setSize(400, 200);
setResizable(false);
setTitle("Delete article");
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
public static void updateList(){
Connection conn = null;
try {
Class.forName("org.sqlite.JDBC");
conn = DriverManager.getConnection("jdbc:sqlite:articleBase.db");
Statement statement = conn.createStatement();
ResultSet result;
ArrayList<Article> list = new ArrayList<Article>();
result = statement.executeQuery("select * from article");
while (result.next()) {
String code = result.getString(1);
String name = result.getString(2);
Double price = result.getDouble(3);
Article a = new Article(code, name, price);
list.add(a);
}
Article[] arr = new Article[list.size()];
for (int i = 0; i < arr.length; i++) {
arr[i] = list.get(i);
}
choice = new JList<Article>(arr);
} catch (ClassNotFoundException | SQLException e1) {
e1.printStackTrace();
}
}
public class MyListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
Connection conn = null;
try {
Class.forName("org.sqlite.JDBC");
conn = DriverManager
.getConnection("jdbc:sqlite:articleBase.db");
Statement statement = conn.createStatement();
Article a = choice.getSelectedValue();
String codeToDelete = a.getCode();
String remove = "DELETE FROM article WHERE code='"
+ codeToDelete + "';";
statement.execute(remove);
} catch (ClassNotFoundException | SQLException e1) {
e1.printStackTrace();
}
}
}
}
答案 0 :(得分:0)
我根据你的代码写了一个简单的例子。对于DefaultListModel
到JList
操作
add or remove
是更好的选择
关于DefaultListModel
,请参阅http://docs.oracle.com/javase/7/docs/api/javax/swing/DefaultListModel.html
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.ListModel;
public class ArticleTask2 extends JFrame {
private static final long serialVersionUID = -1058351261839501095L;
private JPanel mainPanel = new JPanel();
private JButton button = new JButton("Delete");
private DefaultListModel<String> model = new DefaultListModel<String>();
private JList<String> choice;
public ArticleTask2() {
mainPanel.setLayout(new BorderLayout());
add(mainPanel);
updateList();
mainPanel.add(choice, BorderLayout.CENTER);
mainPanel.add(button, BorderLayout.SOUTH);
button.addActionListener(new MyListener());
setSize(400, 200);
setResizable(false);
setTitle("Delete article");
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
public void updateList() {
try {
model.addElement("1");
model.addElement("2");
model.addElement("3");
choice = new JList<String>(model);
} catch (Exception e1) {
e1.printStackTrace();
}
}
public class MyListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
try {
DefaultListModel<String> model = (DefaultListModel<String>)choice.getModel();
model.remove(choice.getSelectedIndex());
} catch (Exception e1) {
e1.printStackTrace();
}
}
}
public static void main(String[] args) {
new ArticleTask2();
}
}
最终结果如下所示
答案 1 :(得分:0)
此类松散地实现了java.util.Vector API,因为它实现了java.util.Vector
的1.1.x版本,没有集合类支持,并在发生更改时通知ListDataListeners
。目前它委托给Vector,在未来的版本中它将是一个真正的Collection实现。
int selectedIndex = JList.getSelectedIndex();
if (selectedIndex != -1) {
model.remove(selectedIndex);
}else{
return"Sucess"
}