Reenderizar página apartir de codigo HTML em java

Boa tarde galera, estou com dificuldades em reenderizar uma pagina em html. Preciso criar um navegador bem simples, onde eu informo uma URL e ele mostra a página, não precisa fazer mais nada, só mostrar a pagina mesmo. A primeira parte do trabalho eu consegui fazer, que era mostrar o código HTML da pagina, na segunda parte, eu preciso pegar esse códido e reenderizar a página web, e é nessa parte que to com dificuldade. Meu professor disse que existe uma biblioteca em java que faz isso, mas nem eu e nem meus colegas conseguimos encontrar nada sobre essa tal biblioteca. Se alguem puder me ajudar, ficarei muito grato!

A primeira parte do trabalho é essa:

package iftm;

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.JTextPane;
import javax.swing.JScrollPane;

@SuppressWarnings({ “unused”, “serial” })
public class Janela extends JFrame {

private JPanel contentPane;
private JTextField txtLink;
private JLabel lblUrl;	
private	JButton btnBuscar;
private JTextPane textPane;
private static String hostname;
private String sentence;
private String retorno, resto = "";
private JScrollPane scrollPane;

public static void main(String[] args) {
	EventQueue.invokeLater(new Runnable() {
		public void run() {
			try {
				Janela frame = new Janela();
				frame.setVisible(true);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	});
}

public Janela() {
	setResizable(false);
	setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	setBounds(100, 100, 900, 600);
	setTitle("Cristovão Colombo");
	contentPane = new JPanel();
	contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
	setContentPane(contentPane);
	contentPane.setLayout(null);
	
	criaComponentes();
	criaAcoes();
	
}

private void criaComponentes() { 
	lblUrl = new JLabel("URL:");
	lblUrl.setBounds(12, 12, 43, 15);
	contentPane.add(lblUrl);
	
	txtLink = new JTextField();
	txtLink.setBounds(51, 10, 704, 19);
	contentPane.add(txtLink);
	txtLink.setColumns(10);
	
	btnBuscar = new JButton("Buscar");
	btnBuscar.setBounds(771, 7, 117, 25);
	contentPane.add(btnBuscar);
	
	scrollPane = new JScrollPane();
	scrollPane.setBounds(12, 39, 876, 522);
	contentPane.add(scrollPane);
	
	textPane = new JTextPane();
	scrollPane.setViewportView(textPane);
}

private void criaAcoes() {
	btnBuscar.addActionListener(new ActionListener() {
		
		@Override
		public void actionPerformed(ActionEvent e) {
			textPane.setText(null);
			String url = txtLink.getText();
			String separarlink[] = url.split("/");
			hostname = (separarlink[0]);
			for (int i = 1; i < separarlink.length; i++) {
				resto += "/" + separarlink[i];
			}
			sentence = "GET /" + resto + " HTTP/1.1";
			Cliente();
		}
	});
}

public void Cliente() {

	try {
		Socket clientSocket = new Socket(hostname, 80);

		DataOutputStream outToSever = new DataOutputStream(clientSocket.getOutputStream());

		BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));

		PrintWriter mostrar = new PrintWriter(clientSocket.getOutputStream());

		mostrar.println();
		mostrar.println("HOST:" + hostname);
		mostrar.println("");
		mostrar.flush();

		BufferedReader ler = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));

		while ((retorno = ler.readLine()) != null) {
			textPane.setText(textPane.getText() + "" + retorno + "\n");
			textPane.repaint();
		}

		// Fecha a conexão
		clientSocket.close();
	} catch (IOException e) {
		System.out.println("Erro " + e);
	}

}

}