如何从JList java中删除项目

时间:2015-08-23 01:30:34

标签: java jlist

我的代码从基础删除文章,但我不知道如何从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();
            }
        }

    }

}

2 个答案:

答案 0 :(得分:0)

我根据你的代码写了一个简单的例子。对于DefaultListModelJList操作

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

最终结果如下所示

enter image description here

enter image description here

答案 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"
}