Перенос значений из списка в другой класс

272
13 ноября 2017, 19:08

Собственно сабж.В отдельном классе парсю страницу,в другом создаю GUI.Требуется передать результат парсинга (цикла) в JTextArea.Джаву изучаю вторую неделю,прошу тапками не бросаться.Парсинг:

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.util.ArrayList;
import java.util.List;
public class parseClass {
public void go() throws Exception {

    List<Article> articleList=new ArrayList<>();
    Document doc=Jsoup.connect("http://4pda.ru").get();
    Elements 
    divelements=doc.getElementsByAttributeValue("itemprop","description");
    divelements.forEach(divelement -> {
       Element pElement=divelement.child(0);
      // String url=pElement.attr("style");
       String title=pElement.text();
       articleList.add(new Article(null,title));
    });
    articleList.forEach(System.out::println);
}
public ArrayList<String> getTextList(){
    ArrayList<String> textList=new ArrayList<String>(); 
    return textList;
}
}

}
class Article{
private String url;
private String name;

public Article(String url, String name) {
    this.url = url;
    this.name = name;
}
public String getUrl() {
    return url;
}
public void setUrl(String url) {
    this.url = url;
}
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
@Override
public String toString() {
    return  "Text= "+name + '\n' ;
}
}

GUI:

import javax.swing.*;
import javafx.stage.Screen;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.Label;
import java.awt.event.*;
public class guiParse {
 JLabel label;
  JFrame frame;
JTextArea jt;
  JScrollPane scroll;
public void gui() {
    label=new JLabel("text");
    jt=new JTextArea(16,58);
    jt.setText("kakoy to text");
    jt.setEditable(false);
    frame =new JFrame();
    JPanel panel=new JPanel();
    scroll= new JScrollPane(jt);
    panel.setLayout(new FlowLayout());
    panel.add(scroll);
    frame.add(panel);

    //frame.getContentPane().add(BorderLayout.SOUTH,);
    frame.setTitle("Future App");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(400,400);
    frame.setVisible(true);
}

}

main:

 import javax.swing.*;
 import java.util.ArrayList;
 import java.util.List;
 import javafx.stage.Screen;
 import java.awt.BorderLayout;
 import java.awt.Label;
 import java.awt.event.*;
 class jSoupTest {
public static void main(String[] args) throws Exception {

    parseClass parse=new parseClass();
    parse.go();

    guiParse gui=new guiParse();
    gui.gui();
}

}

То есть вызов в отдельности есть,не могу передать.Со списками особо не работал,по сути применяю впервые,просто передать по параметру String в gui само собой не вышло.Заранее благодарю

Answer 1

Создайте в parseClass метод, который будет возвращать articleList. Просто добавьте:

return articleList;

вместо:

articleList.forEach(System.out::println);

В guiParse создайте переменную List<Article> articleList и конструктор, принимающий этот список на вход:

public guiParse(List<Article> articleList){
    this.articleList = articleList;
}

В своём main() передавайте результат функцииarticleList на вход конструктора и уже в методе gui() читайте оттуда результат.

Answer 2
class jSoupTest {
    public static void main(String[] args) throws Exception {
        new guiParse().gui(new parseClass().go());
    }
}

import java.awt.FlowLayout;
import java.util.List;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
public class guiParse {
    JLabel label;
    JFrame frame;
    JTextArea jt;
    JScrollPane scroll;
    public void gui(List <Article> articleList) {
        label = new JLabel("text");
        jt = new JTextArea(16, 58);
        jt.setText(namesFromArticleList(articleList));
        jt.setEditable(false);
        frame = new JFrame();
        JPanel panel = new JPanel();
        scroll = new JScrollPane(jt);
        panel.setLayout(new FlowLayout());
        panel.add(scroll);
        frame.add(panel);
        //frame.getContentPane().add(BorderLayout.SOUTH,);
        frame.setTitle("Future App");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(400, 400);
        frame.setVisible(true);
    }
    public String namesFromArticleList(List <Article> articleList) {
        StringBuilder sb = new StringBuilder();
        for (Article article : articleList) sb.append(article.getName()).append("\n");
        return sb.toString();
    }
}

class Article {
    private String url;
    private String name;
    public Article(String url, String name) {
        this.url = url;
        this.name = name;
    }
    public String getUrl() {
        return url;
    }
    public void setUrl(String url) {
        this.url = url;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    @Override
    public String toString() {
        return "Text= " + name + '\n';
    }
}

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.util.ArrayList;
import java.util.List;
public class parseClass {
    public List<Article> go() throws Exception {
        List<Article> articleList = new ArrayList<>();
        Document doc = Jsoup.connect("http://4pda.ru").get();
        Elements divelements = doc.getElementsByAttributeValue("itemprop", "description");
        divelements.forEach(divelement -> {
            Element pElement = divelement.child(0);
            // String url=pElement.attr("style");
            String title = pElement.text();
            articleList.add(new Article(null, title));
        });
        return articleList;
    }
}
READ ALSO
Android Studio - как выявить утечку памяти с помощью Android Profiler

Android Studio - как выявить утечку памяти с помощью Android Profiler

Пишу игру с помощью LibgdxЗапустив Android profiler, заметил что игра жрет приличное количество памяти

236
Как передать в cURL дату в формате Java Date?

Как передать в cURL дату в формате Java Date?

Есть Android-приложение, оно отправляет на сервер через Parsecom один из параметров в формате Date:

191
switch не считывает строки

switch не считывает строки

Добрый день, у меня возникла проблема с incompatible types error, проблема заключается в том что switch не считывает строки, хотя версия jdk 9

274
Firebase Android studio Notifications

Firebase Android studio Notifications

Добрый день, открываю в Android Studio Firebase и не вижу там пункт Notifications, хотя вроде должен быть там, можете подсказать почему нет его? Версия 30 студии

241