Собственно сабж.В отдельном классе парсю страницу,в другом создаю 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 само собой не вышло.Заранее благодарю
Создайте в parseClass
метод, который будет возвращать articleList
. Просто добавьте:
return articleList;
вместо:
articleList.forEach(System.out::println);
В guiParse
создайте переменную List<Article> articleList
и конструктор, принимающий этот список на вход:
public guiParse(List<Article> articleList){
this.articleList = articleList;
}
В своём main()
передавайте результат функцииarticleList
на вход конструктора и уже в методе gui()
читайте оттуда результат.
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;
}
}
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Пишу игру с помощью LibgdxЗапустив Android profiler, заметил что игра жрет приличное количество памяти
Есть Android-приложение, оно отправляет на сервер через Parsecom один из параметров в формате Date:
Добрый день, у меня возникла проблема с incompatible types error, проблема заключается в том что switch не считывает строки, хотя версия jdk 9
Добрый день, открываю в Android Studio Firebase и не вижу там пункт Notifications, хотя вроде должен быть там, можете подсказать почему нет его? Версия 30 студии