GUI 창에 HTML 을 파싱 하는 방법임.
간단하게 만들 GUI창을 설명하면
'UTF-8' 과 'EUC-KR' 을 선택할 콤보박스를 만들고 그옆에 주소창 입력칸을 만들어서 입력하면
메인칸에 나타나게하도록 만들겠다.
00. 코드를 입력하고 실행하자.
01. 콤보박스에 'UTS-8'과 'EUC-KR' 선택할 수 있게 나온다.
02. 아무 주소를 입력해서 HTML파싱이 잘되는지 확인해보자.
03. 'UTF-8' 로 했을때 한글이 잘 나오는것을 확인할 수 있다.
04. 'EUC-KR' 로 했을때 한글이 깨져서 오는것을 확인할 수 있다.
※. 코드
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
class MyFrame extends JFrame implements ActionListener{
private JPanel displayPanel;
private JPanel inputPanel;
private JTextArea display;
private JTextField input;
private String[] charset = {"UTF-8", "EUC-KR"};
private JComboBox charsetList;
public MyFrame()
{
this.setTitle("No Title");
}
public MyFrame(String title)
{
this.setTitle(title);
this.setSize(500, 400);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLayout( new BorderLayout() );
/*
* panel 생성하고, 필요한 컴포넌트를 만들기
*/
displayPanel = new JPanel();
displayPanel.setLayout(new FlowLayout());
display = new JTextArea(11, 30);
Font displayFont = new Font("Serif", Font.BOLD, 20);
display.setFont(displayFont);
display.setEditable(false);
// textarea를 스크롤이 되도록 변경
JScrollPane scroll = new JScrollPane(display);
displayPanel.add(scroll);
/* input */
inputPanel = new JPanel();
inputPanel.setLayout(new FlowLayout());
input = new JTextField(20);
Font inputFont = new Font("Serif", Font.BOLD, 20);
input.setFont(inputFont);
input.addActionListener(this);
charsetList = new JComboBox(charset); //콤보박스 추가
charsetList.setSize(100,40);
inputPanel.add(charsetList); // 패널에 콤보박스 붙임
inputPanel.add(input);
/*
* Frame에 두개의 panel을 붙이기
*/
this.setLayout(new BorderLayout());
this.add(displayPanel, BorderLayout.CENTER);
this.add(inputPanel, BorderLayout.SOUTH);
this.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource() == input)
{
display.append( input.getText() + "\n");
try {
URL url = new URL(input.getText()); // input에 주소창을 넣으면 그 값을 읽어옴.
display.setText(""); // 이벤트가 발생하면 display 를 비워주고 새로 getText해옴
String cs = (String)charsetList.getSelectedItem(); // 콤보박스에 있는 아이템을 cs 로 받음
BufferedReader in = new BufferedReader( new InputStreamReader( url.openStream(), cs ) ); // buffer는 한번에 주기적으로 받아오는것
String line;
int count = 0;
String lineCount = "";
while( (line = in.readLine()) != null)
{
lineCount = lineCount.format("%4d : ", ++count); // 4d 를 해서 제일 처음에 4줄을 잡아먹게 만든다.
display.append(lineCount + line + "\n");
}// while
} catch (Exception e2) {
display.append("ERROR : " + e2.getMessage() + '\n');
}
input.selectAll();
//input.setText("");
}// if
}// actionPerformed
}// MyFrame Class
public class Test {
public static void main(String[] args) {
MyFrame frame = new MyFrame("HTML");
}// main
}// Main Class