перенос класса JTextArea в основной класс JTextArea

#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.

  1. У вас не может быть двух основных методов в одном приложении.

  2. В Java вы не можете поместить метод внутри другого.

  3. общедоступный SimpleWebCrawler() выдает исключение MalformedURLException, и у вас также есть try-catch внутри.

  4. 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.