简体   繁体   English

从JButton ActionListener填充JList

[英]Populating a JList from a JButton ActionListener

Running into a lot of problems trying to populate a JList after a button press. 按下按钮后尝试填充JList时遇到很多问题。 The code below utilizes a technique that I have employed successfully before, but I have been unable to get this working. 下面的代码利用了我之前成功采用的一种技术,但是我无法使它正常工作。 The goal is to run a test after pressing a button and display the urls that passed and the urls that failed in separate JLists. 目标是在按下按钮后运行测试,并在单独的JList中显示通过的URL和失败的URL。

The Action Listener: 动作监听器:

//Start button--starts tests when pressed.
        JButton start = new JButton("Start"); 
        start.setPreferredSize(new Dimension(400, 40));
        start.setAlignmentX(Component.CENTER_ALIGNMENT); 
        start.addActionListener(new Web(urlA, codeA, cb, passJ, failJ));
        panel2.add(start); 

The Action Listener Method: 动作侦听器方法:

    import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.ProtocolException;
import java.net.URL;
import java.util.ArrayList;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JList;


public class Web implements ActionListener {
    private ArrayList<String> urls; 
    private ArrayList<Integer> statusCodes;
    private JComboBox cb;

    private JList passJ = new JList();  
    private JList failJ = new JList(); 

    //constructor--allows other values to be used
    public Web(ArrayList<String> urls, ArrayList<Integer> statusCodes, JComboBox cb, JList passList, JList failList ){
        this.urls = urls; 
        this.statusCodes = statusCodes; 
        this.cb = cb;
        this.passJ = passJ;
        this.failJ = failJ; 

    }


    @Override
public void actionPerformed(ActionEvent event){

        ArrayList<String> resultsP = new ArrayList<String>(); 
        ArrayList<String> resultsF = new ArrayList<String>();

        //get source
        JButton start = (JButton) event.getSource();


        //get value from combobox
        String selected = cb.getSelectedItem().toString(); 

        if(selected.equals("ALL")){

        }

        if(selected.equals("STATUS CODE")){

            for(int i = 0; i < urls.size(); i++){


            try {
                URL u = new URL(urls.get(i));
                HttpURLConnection connection = (HttpURLConnection)u.openConnection(); //open connection and cast to HttpURLConnection
                connection.setRequestMethod("GET"); 
                connection.connect(); 
                int code = connection.getResponseCode();

                if (code == statusCodes.get(i)){
                    System.out.println(i + "."+ urls.get(i)+" \t\t\t PASS");
                    resultsP.add(urls.get(i)); 

                    }
                else{
                    System.out.println(i + "." +urls.get(i)+ "\t\t\t FAIL");
                    resultsF.add(urls.get(i)); 


                }

            } catch (MalformedURLException | ProtocolException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } 



} 

            for (String str: resultsP){
                System.out.println(str);
            }
            System.out.println("/////////////////////////////////////////////////////////////////////////////////"); 
            for (String str: resultsF){
                System.out.println(str); 
            }

            passJ.removeAll(); 
            failJ.removeAll();

            passJ.setListData(resultsP.toArray());
            failJ.setListData(resultsF.toArray())   ; 

            passJ.repaint(); 
            failJ.repaint(); 


        }//StatusCodeTest


    }
}

How the lists are added to the GUI: 列表如何添加到GUI:

        JList passJ = new JList(urlA.toArray()); 

        JScrollPane scroll1 = new JScrollPane(passJ); 
        scroll1.setPreferredSize(new Dimension (700, 150)); 
        scroll1.setMaximumSize( scroll1.getPreferredSize() );
        scroll1.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED); 

        panel2.add(scroll1);        
        panel2.add(Box.createRigidArea(new Dimension(0,50)));

        JList failJ = new JList(urlA.toArray()); 
        JScrollPane scroll2 = new JScrollPane(failJ); 
        scroll2.setPreferredSize(new Dimension(700, 150)); 
        scroll2.setMaximumSize(scroll1.getPreferredSize()); 
        scroll2.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED); 

        panel2.add(scroll2); 
        //spacer
        panel2.add(Box.createRigidArea(new Dimension(0,25)));

Any GUI dance would be greatly appreciated. 任何GUI舞将不胜感激。

  1. Seems you have different instances of passJ / failJ in your Web class and GUI class. 似乎您的Web类和GUI类中具有不同的passJ / failJ实例。
  2. passJ.removeAll(); failJ.removeAll(); doesn't clear items of JList , that method from Container . 不会清除ContainerJList项。

Here is simple example of adding/clearing items to JList : 这是向JList添加/清除项目的简单示例:

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.JScrollPane;

public class TestFrame extends JFrame {

    private JList<Integer> normal;
    private JList<Integer> fail;
    private Integer[] vals;

    public TestFrame() {
        init();
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        pack();
        setLocationRelativeTo(null);
        setVisible(true);
    }

    private void init() {
        normal = new JList<Integer>(new DefaultListModel<Integer>());
        fail = new JList<Integer>(new DefaultListModel<Integer>());

        vals = new Integer[]{1,2,3,4,5,6,7,8,9,33};
        JButton add = new JButton("collect data");
        add.addActionListener(getCollectListener());
        JButton clear = new JButton("clear data");
        clear.addActionListener(getClearListener());

        JPanel p = new JPanel();
        p.add(new JScrollPane(normal));
        p.add(new JScrollPane(fail));

        JPanel btnPanel = new JPanel();
        btnPanel.add(add);
        btnPanel.add(clear);
        add(p);
        add(btnPanel,BorderLayout.SOUTH);
    }

    private ActionListener getClearListener() {
        return new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                ((DefaultListModel<Integer>)normal.getModel()).removeAllElements();
                ((DefaultListModel<Integer>)fail.getModel()).removeAllElements();
            }
        };
    }

    private ActionListener getCollectListener() {
        return new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                for(Integer i : vals){
                    if(i%3==0){
                        ((DefaultListModel<Integer>)normal.getModel()).addElement(i);
                    } else {
                        ((DefaultListModel<Integer>)fail.getModel()).addElement(i);
                    }
                }
            }
        };
    }

    public static void main(String args[]) {
        new TestFrame();
    }

}

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

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