繁体   English   中英

如何更新JList?

[英]How to update JList?

我想从这个程序中得到的是当按下第一个按钮时,它将显示分配的阵列,当按下第二个按钮时清除列表并显示分配的阵列,我一直在寻找解决方案在线,很多人都在建议使用列表模型,任何提示都表示赞赏。


import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;

public class tester extends JFrame{
private JList list = new JList();
private JButton b1 = new JButton("Array1");
private JButton b2 = new JButton("Array2");

public tester(){
    final String [] Array1 = {"1", "2", "3", "4"};
    final String [] Array2 = {"one", "two", "three", "four"};

    JPanel p1 = new JPanel();
    p1.add(new JScrollPane(list));
    p1.add(b1);
    p1.add(b2);
    add(p1, BorderLayout.CENTER);

    b1.addActionListener(new ActionListener (){
        public void actionPerformed(ActionEvent e){
            DefaultListModel Model1 = (DefaultListModel)list.getModel();
            for(int i = 0; i < Array1.length; i++){
                Model1.addElement(Array1[i]);
            }
        }
    });

    b2.addActionListener(new ActionListener (){
        public void actionPerformed(ActionEvent e){
            DefaultListModel Model2 = (DefaultListModel)list.getModel();
            for(int i = 0; i < Array2.length; i++){
                Model2.addElement(Array2[i]);
            }
        }
    });

}

public static void main (String [] args){
    tester t1= new tester();
    t1.pack();
    t1.setLocationRelativeTo(null);
    t1.setTitle("Test");
    t1.setVisible(true);
    t1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}
}

你得到一个ClassDCastException因为你想投(DefaultListModel)的模式,是不是DefaultListModel 首先需要将模型设置为DefaultListModel列表

    DefaultListModel model = new DefaultListModel();
    list.setModel(model);

当你这样做时,这将摆脱ClassCastException

    DefaultListModel Model1 = (DefaultListModel)list.getModel();

此外,您没有要清除的按钮,只能添加数组。 所以你想要一个按钮来清除并在actionPerformed使用

    model.removeAllElements();

这是您的代码的重构版本,可行

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;

public class tester extends JFrame {

    private JList list = new JList();
    private JButton b1 = new JButton("Array1");
    private JButton b2 = new JButton("Array2");
    private JButton clear = new JButton("Clear");
    private DefaultListModel model;

    public tester() {
        final String[] Array1 = {"1", "2", "3", "4"};
        final String[] Array2 = {"one", "two", "three", "four"};

        model = new DefaultListModel();
        list.setModel(model);
        JPanel p1 = new JPanel();
        p1.add(new JScrollPane(list));
        p1.add(b1);
        p1.add(b2);
        p1.add(clear);
        add(p1, BorderLayout.CENTER);

        clear.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                model.removeAllElements();
            }
        });
        b1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                DefaultListModel Model1 = (DefaultListModel) list.getModel();
                for (int i = 0; i < Array1.length; i++) {
                    Model1.addElement(Array1[i]);
                }
            }
        });

        b2.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                DefaultListModel Model2 = (DefaultListModel) list.getModel();
                for (int i = 0; i < Array2.length; i++) {
                    Model2.addElement(Array2[i]);
                }
            }
        });
    }

    public static void main(String[] args) {
        tester t1 = new tester();
        t1.pack();
        t1.setLocationRelativeTo(null);
        t1.setTitle("Test");
        t1.setVisible(true);
        t1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    }
}

尝试这个:

b1.addActionListener(new ActionListener (){
    @Override
    public void actionPerformed(ActionEvent e){
        DefaultListModel Model1 = new DefaultListModel();
        for(int i = 0; i < Array1.length; i++){
            Model1.addElement(Array1[i]);
        }
        list.setModel(Model1);
    }
});

b2.addActionListener(new ActionListener (){
    @Override
    public void actionPerformed(ActionEvent e){
        DefaultListModel Model2 = new DefaultListModel();
        for (String Array21 : Array2) {
            Model2.addElement(Array21);
        }
        list.setModel(Model2);
    }
});

这是给你的样品

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.GridLayout;
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.JScrollPane;

public class Main {
    private static int i = 1;

    public static void main(String args[]) {
        JFrame frame = new JFrame("Demo Frame/SuRu");
        Container contentPane = frame.getContentPane();
        Container contentPane2 = new JPanel(new GridLayout(3, 1));
        contentPane.setLayout(new BorderLayout());

        final DefaultListModel model = new DefaultListModel();
        final JList jList = new JList(model);
        JButton addButton = new JButton("Add Element");
        JButton removeButton = new JButton("Remove Element");
        JButton removeAllButton = new JButton("Remove All");

        contentPane2.add(addButton);
        contentPane2.add(removeButton);
        contentPane2.add(removeAllButton);
        contentPane.add(new JScrollPane(jList), BorderLayout.CENTER);
        contentPane.add(contentPane2, BorderLayout.EAST);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setBounds(100, 100, 500, 350);
        frame.setVisible(true);

        addButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent arg0) {
                model.addElement("Element " + i);
                i++;
            }
        });
        removeButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent arg0) {
                if (jList.getSelectedIndex() != -1) {
                    model.remove(jList.getSelectedIndex());
                }
            }
        });
        removeAllButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent arg0) {
                model.removeAllElements();
            }
        });

    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM