Java rss parser вывести результат в одном окне
Коллеги, не получается сделать так, чтобы найденные заголовки новостей были в одном окне textArea.setText(). Если выводить их как System.out.println(message) то все новости будут выведены в консоль, а мне хочется чтобы они были в одном таб-окне. Причём в коде ниже окно открывается много раз и каждое с новой новостью.
Что поменять, изменить? Я товарищ начинающий в Java, только год её учу, прошу писать подробно, что я делаю не так.
import News.Feed;
import News.FeedMessage;
import News.RSSFeedParser;
import java.awt.*;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
public class Window extends JFrame {
private static final long serialVersionUID = -127237179251867335L;
JPanel contentPane;
JTextField textField;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
RSSFeedParser parser = new RSSFeedParser("https://russian.rt.com/rss");
Feed feed = parser.readFeed();
for (FeedMessage message : feed.getMessages()) {
//System.out.println(message);
Window frame = new Window(message.toString());
frame.setVisible(true);
}
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public Window(String news_in) {
setBackground(new Color(0, 0, 0));
setTitle("News");
setForeground(new Color(175, 238, 238));
setFont(new Font("SansSerif", Font.PLAIN, 12));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 805, 536);
contentPane = new JPanel();
contentPane.setBackground(new Color(245, 255, 250));
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP);
tabbedPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
tabbedPane.setBounds(10, 21, 766, 450);
contentPane.add(tabbedPane);
JScrollPane scrollPane = new JScrollPane();
tabbedPane.addTab("RT", null, scrollPane, null);
JTextArea textArea = new JTextArea();
textArea.setRows(1);
textArea.setColumns(1);
scrollPane.setViewportView(textArea);
textArea.setEditable(false);
textArea.setFont(new Font("SansSerif", Font.PLAIN, 12));
textArea.setBackground(new Color(255, 250, 205));
textArea.setText(news_in);
}
}
Ответы (1 шт):
Автор решения: Alexander Chernin
→ Ссылка
import java.awt.*;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
public class Window extends JFrame {
private static final long serialVersionUID = -127237179251867335L;
JPanel contentPane;
JTextField textField;
JTextArea textArea; // <- Текстовое поле, теперь объявлено тут
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
RSSFeedParser parser = new RSSFeedParser("https://russian.rt.com/rss");
// Создаем одно окно
Window frame = new Window();
// Показываем его
frame.setVisible(true);
// Кормим сообщениями
Feed feed = parser.readFeed();
for (FeedMessage message : feed.getMessages()) {
// Метод appendText добавлен ниже
frame.appendText(message.toString())
}
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
// Конструктор без параметра
public Window() {
// код как у вас...
// создаем текстовое поле класса. Объявление смотрите выше
textArea = new JTextArea();
textArea.setRows(1);
textArea.setColumns(1);
scrollPane.setViewportView(textArea);
textArea.setEditable(false);
textArea.setFont(new Font("SansSerif", Font.PLAIN, 12));
textArea.setBackground(new Color(255, 250, 205));
}
// Добавляем текст в блок и не забываем перейти на новую строку,
// или забываем,- тогда надо удалить вот это +'\n'
public void appendText(String text) {
textArea.append(text + '\n');
}
}