#java #textarea
#java #текстовая область
Вопрос:
public class SimpleWebCrawler extends JFrame {
static JTextArea _resultArea = new JTextArea(200, 200);
JScrollPane scrollingArea = new JScrollPane(_resultArea);
private final static String newline = "n";
public SimpleWebCrawler() throws MalformedURLException {
_resultArea.setEditable(false);
System.out.println("Please enter the website :");
Scanner scan2 = new Scanner(System.in);
String word2 = scan2.nextLine();
try {
URL my_url = new URL("http://" word2 "/");
BufferedReader br = new BufferedReader(new InputStreamReader(
my_url.openStream()));
String strTemp = "";
while (null != (strTemp = br.readLine())) {
_resultArea.append(strTemp newline);
}
} catch (Exception ex) {
ex.printStackTrace();
}
JPanel content = new JPanel();
content.setLayout(new BorderLayout());
content.add(scrollingArea, BorderLayout.CENTER);
this.setContentPane(content);
this.setTitle("Crawled Links");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.pack();
public static void main(String[] args) throws IOException {
JFrame win = new SimpleWebCrawler();
win.setVisible(true);
}
}
Этот класс извлекает URL-адрес с веб-сайта и отображает выходные данные в JTextArea.
public class Main {
private static void createAndShowGUI() {
JFrame frame1 = new JFrame("FINAL YEAR PROJECT VER 1.0");
JTextArea test = new JTextArea(200, 200);
frame1.setSize(500,500);
frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame1.add(test);
FlowLayout experimentLayout = new FlowLayout();
experimentLayout.setAlignment(FlowLayout.CENTER);
frame1.setLayout(experimentLayout);
JButton button = new JButton("Extract Links");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
try {
SimpleWebCrawler.main(null);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
});
frame1.getContentPane().add(button);
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}
Этот класс является основным классом с графическим интерфейсом. В нем есть кнопка для вызова другого класса для выполнения кода. Теперь вопрос в том, что я помещаю JTextArea в этот фрейм основного класса. Как мне перенести вышеуказанные выходные данные класса в этот класс JTextArea?
Комментарии:
1. Что означает «перенести вышеуказанные выходные данные в этот класс JTextArea class»?
2. это означает, что отображение результатов первого класса в основном классе jtextarea..
3. Вы хотите использовать два разных процесса? Почему бы не использовать многопоточное приложение с шаблоном Model-View-Controller?
Ответ №1:
У вас есть main внутри конструктора в SimpleWebCrawler и еще один внутри createAndShowGUI в Main.
-
У вас не может быть двух основных методов в одном приложении.
-
В Java вы не можете поместить метод внутри другого.
-
общедоступный SimpleWebCrawler() выдает исключение MalformedURLException, и у вас также есть try-catch внутри.
-
SimpleCrawler будет работать, если вы добавите закрывающую скобку ‘}’ прямо перед public static void main.
как здесь…
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.pack();
}
public static void main(String[] args) throws IOException {
JFrame win = new SimpleWebCrawler();
win.setVisible(true);
}
Вам вообще не нужен основной класс. JTextArea находится в SimpleWebCrawler. Вам нужно добавить туда свою логику.
Чтобы превратить это в средство поиска веб-страниц, вы можете получить HTML-код из вашего _resultArea JTextArea, обработать его и передать и отобразить результаты в модальный JDialog с другим JTextArea или добавить второй JTextArea рядом с тем, который у вас есть в том же JFrame.
Комментарии:
1. да, потому что у меня есть другой класс, который также выполнял свои специфические функции. Моя задача — объединить эти классы в один графический интерфейс, который находится в основном классе. Я думал отобразить один из выходных данных класса в текстовую область графического интерфейса основного класса при нажатии кнопки.
2. Сэр, спасибо за ваш отзыв. Не могли бы вы подробнее объяснить свой «проход и отображение результатов в модальном JDialog»?
3. Вы могли бы добавить «Evaluate» JButton к вашему исходному JFrame и заставить его action listener анализировать HTML, который вы уже прочитали, в вашем JTextField. Вы можете создать второй класс с именем ResultsDialog, который расширяет JDialog и имеет JTextArea и кнопку OK, а также метод void setResults (String myResults). После завершения синтаксического анализа вы можете вызвать конструктор ResultsDialog, передать строку результатов и сделать диалоговое окно видимым. Результаты будут видны до тех пор, пока не будет нажата кнопка OK.