なんとな~くしあわせ?の日記

「そしてそれゆえ、知識そのものが力である」 (Nam et ipsa scientia potestas est.) 〜 フランシス・ベーコン

javaでGUI

HttpClientのGUI版をJavaで作ってみる。perlとかpythonプラグイン入れても挙動がおかしくならないeclipseIDEの鑑。

//HttpClient.java

package internal;

import java.io.*;
import java.net.*;

public class HttpClient {

	private String HTMLPages;

	public void setHTMLPages(String hTMLPages) {
		HTMLPages = hTMLPages;
	}

	public String getHTMLPages() {
		return HTMLPages;
	}

	public void getHTTP(String inputUrl) {

		String url = inputUrl;
		String proxyHost = null;
		int proxyPort = 80;

		URL urlObj;
		HttpURLConnection urlCon;
		BufferedReader urlIn;
		String str;

		if (inputUrl.length() > 0) {
			url = inputUrl;
		}

		try {
			// URLオブジェクトの作成
			if (proxyHost == null) {
				urlObj = new URL(url);
			} else {
				urlObj = new URL("http", proxyHost, proxyPort, url);
			}

			// URL接続
			urlCon = (HttpURLConnection) urlObj.openConnection();
			urlCon.setRequestMethod("GET");
			urlIn = new BufferedReader(new InputStreamReader(urlCon
					.getInputStream(), "JISAutoDetect"));

			// HTMLソース格納用変数を準備
			StringBuffer sbuf = new StringBuffer("");

			// HTMLソースの格納
			while ((str = urlIn.readLine()) != null) {
				sbuf.append(str);
			}

			// HTMLソースをメンバ変数に格納
			this.setHTMLPages(sbuf.toString());

			// URL切断
			urlIn.close();
			urlCon.disconnect();

		} catch (Exception ex) {
			ex.printStackTrace();
		}
	}
}
//HttpClientFrame.java

package gui;

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

import internal.HttpClient;

public class HttpClientFrame extends JFrame {

	// エラーがうるさいのでIDを自動生成
	private static final long serialVersionUID = 1L;

	// 上下のパネル設定
	JPanel abovePanel = new JPanel();
	JPanel underPanel = new JPanel();

	// ラベル、テキストエリア、ボタンの設定(上部)
	private JLabel label = new JLabel("URL:");
	private JTextField tf = new JTextField("", 30);
	private JButton b1 = new JButton("OK");

	// ラベル、テキストエリア、ボタンの最小サイズを求めておく
	Dimension sz1 = label.getMaximumSize();
	Dimension sz2 = tf.getMaximumSize();
	Dimension sz3 = b1.getMaximumSize();

	// テキストエリアの設定(下部)
	private JTextArea ta = new JTextArea("", 4, 15);

	HttpClientFrame() {

		// 要素の下準備
		sz2.width = Short.MAX_VALUE; // テキストエリアはどこまでも大きくなる
		sz2.height = sz3.height;
		tf.setMaximumSize(sz2);

		// 縦2パネル構成 (上:URL入力欄 ボタンなど 下:HTML文出力)
		setLayout(new BorderLayout());
		add("North", abovePanel);
		add("Center", underPanel);

		// 要素をパネルに配置(上部)
		abovePanel.setLayout(new BoxLayout(abovePanel, BoxLayout.LINE_AXIS));
		abovePanel.add(label);
		abovePanel.add(tf);
		b1.addActionListener(new inputURLListener());
		abovePanel.add(b1);

		// 要素をパネルに配置(下部)
		underPanel.setLayout(new GridLayout(1, 1));
		ta.setLineWrap(true);
		JScrollPane scrollpane = new JScrollPane(ta);
		underPanel.add(scrollpane);

		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setTitle("HttpClientGUI");
		setSize(640, 480);
		setVisible(true);
	}

	// アクションリスナークラス
	class inputURLListener implements ActionListener {

		HttpClient hc = new HttpClient();

		public void actionPerformed(ActionEvent e) {
			// OKボタンが押されたときの処理
			if (tf.getText() != null) {
				String inputURL = tf.getText();
				hc.getHTTP(inputURL);
				ta.setText(hc.getHTMLPages());
			}
		}

	}

	public static void main(String args[]) {
		new HttpClientFrame();
	}
}

動作風景

   ・jarファイル → exeファイルへの変換を行ったところ438KBになった。軽いっすね。


>
>
>
>
>