Java 更新/重新创建JList

Java 更新/重新创建JList,java,swing,arraylist,jbutton,jlist,Java,Swing,Arraylist,Jbutton,Jlist,这是我在这里的第一篇文章,我对Java非常熟悉。这是我试图提高java知识的东西 我有一个按钮,点击它会产生一个洗牌牌组作为一个列表。 再次按下时,我非常希望它刷新JList,或者以某种方式重新创建它。相反,它只是 创建一个新列表,因此我现在有2个jList button1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e)

这是我在这里的第一篇文章,我对Java非常熟悉。这是我试图提高java知识的东西

我有一个按钮,点击它会产生一个洗牌牌组作为一个列表。 再次按下时,我非常希望它刷新JList,或者以某种方式重新创建它。相反,它只是 创建一个新列表,因此我现在有2个jList

        button1.addActionListener(new ActionListener()
    {
        public void actionPerformed(ActionEvent e)
        {

            cards.choseCards(); //Creates an ArrayList with the suffled cards
            JList<String> displayList = new JList<>(cards.deck.toArray(new String[0]));
            frame.add(displayList);
            frame.pack();
            cards.cleanUpDeck(); //Removes all the cards from the ArrayList
        }
    });
button1.addActionListener(新ActionListener()
{
已执行的公共无效操作(操作事件e)
{
cards.choseCards();//创建一个包含所有卡片的ArrayList
JList displayList=新的JList(cards.deck.toArray(新字符串[0]);
frame.add(显示列表);
frame.pack();
cards.cleanUpDeck();//从ArrayList中删除所有卡
}
});

这里的关键是Swing使用了一种与“模型视图控制器”(model view controller)类似的“模型视图”类型的结构,其中模型保存视图(组件)显示的数据

您要做的是创建一个全新的JList,但您要做的是更新现有和显示的JList的模型,或者为同一个现有JList创建一个新模型。JLists使用ListModel作为其模式,通常作为DefaultListModel对象实现,因此您需要更新或替换此模型,例如创建一个新的DefaultListModel对象,然后通过调用其
setModel(ListModel model)
方法将其插入现有JList

例如,您的代码可能看起来像这样(由于我们不知道您的真实代码是什么样子,所以通过大量的猜测来生成):

button1.addActionListener(新ActionListener(){
@凌驾
已执行的公共无效操作(操作事件e){
//为JList创建新模型
DefaultListModel listModel=新的DefaultListModel();
cards.choseCards();//创建一个包含所有卡片的ArrayList
//将卡片添加到模型中。我不知道你的牌组字段是什么样子
//所以这是一个疯狂的猜测。
用于(卡片:卡片。卡片组){
listModel.addElement(card.toString());//您是否覆盖了card的toString()
}
//猜测您的JList位于名为displayList的字段中。
displayList.setModel(listModel);//传入模型
cards.cleanUpDeck();//从ArrayList中删除所有卡
}
});

actionPerformed()方法中的第二行创建了一个新的
JList
,因此每次按下按钮时,一个新的
JList
将添加到帧中。尝试在方法和内部类之外创建列表,并在方法内部更新数据。我不得不对其进行一些调整,但这正是我所需要的!非常感谢您的帮助:-)
button1.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        // create new model for the JList
        DefaultListModel<String> listModel = new DefaultListModel<>();
        cards.choseCards(); //Creates an ArrayList with the suffled cards

        // add the cards to the model. I have no idea what your deck field looks like
        // so this is a wild guess.
        for (Card card : cards.deck) {
            listModel.addElement(card.toString());  // do you override toString() for Card? Hope so
        }

        // Guessing that your JList is in a field called displayList.
        displayList.setModel(listModel);  // pass the model in
        cards.cleanUpDeck(); //Removes all the cards from the ArrayList
    }
});