Java クラス。SWT。Eclipse3.7

VB Tips And Sample(HOME)VBプログラマの為のJava入門

Java クラス。SWT。Eclipse3.7

クラスと言えば、うーーん。
昔の入門書等では動物と言うクラスに、ライオンと言う実態がいる。
とか、余計ややこしく説明していたものがあったけれど。
要するに、クラスとは、使いまわしたい動き(処理)を作っておき、使いたい時に呼び出して使うもの。
関数と何が違うのか?
プロパティーや、いろいろな関数を装着できる所。
で、使い方は?
実態(インスタンス)を作成してから使う。
オブジェクト指向などと呼ばれています。
では、その作り方ですが、VB.NETとよく似ています。ま、VBがだんだんJAVAに近づいてきたと言ったほうが正確なのですが・・・・
まずは、クラスを追加します。
プロジェクトのソースのフォルダを右クリックして、「クラス」をクリック。
名前を入力するダイアログが出るので、適当な名前を入れて作成します。
ここでは、xmlreadとしました。
XMLファイルを読みこむクラスと言うことです。
すると、

クラスclass
			package sql_adjust;
			
			public class xmlread {

			}
			

という雛形が作成されます。
ここに、コンストラクタ=クラスの実態が作成される時に走る関数や、
そのほかの関数、プロパティーなどを追加していく。
そこで、疑問がpackage
なんだこりゃ?と言うので調べてみると、
VBで言うネームスペース的なものだが、要は、sql_adjust(と言うフォルダ)の下のクラスですよ!という意味らしい。
因みに、このpackage sql_adjust;をコメントアウトにすると、

宣言されたパッケージ "" が、予想されているパッケージ "sql_adjust" に一致しません xmlread.java /MYSQL_SQL/src/sql_adjust 行 1 Java 問題

というエラーが出る。
ま、必須と言うわけか。
では、コンストラクタ、プロパティーを書いてみる。

package sql_adjust;
import java.io.File;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class xmlread {

	//カプセル化?する
	//変数だけ書いたら、警告マークみたいなものが出る。
	//マウスオーバすると、その中に、.NETみたいに、メソッドをついかする?みたいなのがあるので
	//実行すると後は自動的にpublic String getServerPath() {・・・などは書いてくれtる
	private static String ServerPath;//サーバ
	private static String User;//ユーザ
	private static String Password;//パスワード

	//コンストラクタ。コンストラクタはクラス名と同じ!
	public xmlread(){
		try
		{

			//アプリケーション実行パスnew File( "." ).getAbsoluteFile().getParent()で取得できるが
			//ただ単に、ファイル名を書けば同フォルダのファイルを参照できるようだ。
			//String Fs = new File( "." ).getAbsoluteFile().getParent() + "\\mysqlconnect.xml";
			//フアィルがあるか否かチェック
			File file = new File(new File( "." ).getAbsoluteFile().getParent() + "\\mysqlconnect.xml");
			if (file.exists()){
			    //System.out.println("存在);
			}else{
				if (str == "ms"){

				JOptionPane.showMessageDialog(null
						,"設定ファイル\r\nmysqlconnect.xml\r\nがありません。\r\n起動後、「メニュー」の接続設定に進んでください。"
						,"確認"
						,JOptionPane.YES_OPTION | JOptionPane.WARNING_MESSAGE);
				/*これは実行できなかった。なんで?
				Display display = new Display ();
				Shell shell = new Shell(display);
				MessageBox msg = new MessageBox(shell,SWT.ICON_ERROR|SWT.YES|SWT.NO);
				msg.setText("確認");
				msg.setMessage("設定ファイル\r\nmysqlconnect.xml\r\nがありません。起動後、「メニュー」の接続設定に進んでください。");
				msg.open();
				 */
				}
			}

			
			
			
			
			//XMLを読み込む
			String Fs = "mysqlconnect.xml";			
			
			/*<?xml version="1.0" encoding="UTF-8" standalone="no"?>
				<MYSQL>
					<Server>centos5vm/test</Server>
					<User>vbuser</User>
					<Password>sa</Password>
				</MYSQL>*/
			
			DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

			DocumentBuilder builder = dbf.newDocumentBuilder();

	  		Document xmldc = builder.parse(new File(Fs));

			NodeList nlist =xmldc.getChildNodes();

			//ノードリストからノードをとって
			Node X_node	= 	nlist.item(0);

			NodeList ch_nlist;

			//System.out.println( X_node.getFirstChild().getTextContent());

			ch_nlist = ((Element)X_node).getElementsByTagName("Server");
			ServerPath = ch_nlist.item(0).getFirstChild().getTextContent();

			ch_nlist = ((Element)X_node).getElementsByTagName("User");
			User = ch_nlist.item(0).getFirstChild().getTextContent();

			ch_nlist = ((Element)X_node).getElementsByTagName("Password");
			Password = ch_nlist.item(0).getFirstChild().getTextContent();




		}
		catch (Exception er)
		{
	  		er.printStackTrace();
		}

	}

	public String getServerPath() {
		return ServerPath;
	}
	/*
	public void setServerPath(String serverPath) {
		ServerPath = serverPath;
	}
*/
	public String getUser() {
		return User;
	}
	/*
	public void setUser(String user) {
		User = user;
	}
 	*/
	public String getPassword() {
		return Password;
	}
	/*
	public void setPassword(String password) {
		Password = password;
	}
	*/

}
			
			

なんだか、コンストラクタが、staticも、voidもついてなくてえらいシンプルだが、これでいいのだそうだ。
ちなみに、

public static void main(String[] args){
		System.out.println("Hello World");
	}

を追加してやると、このクラス単体でもデバグできるようになる。
public static void main(String[] args){とは、要するに、クラス定義自体で実行可能になる呪文と言うわけらしい。
で、ちょこっと書き換えたクラス。

package sql_adjust;

import java.io.File;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class xmlread {

	//カプセル化?する
	//変数だけ書いたら、警告マークみたいなものが出る。
	//マウスオーバすると、その中に、.NETみたいに、メソッドをついかする?みたいなのがあるので
	//実行すると後は自動的にpublic String getServerPath() {・・・などは書いてくれtる
	private static String ServerPath;//サーバ
	private static String User;//ユーザ
	private static String Password;//パスワード

	public static void main(String[] args){
		System.out.println("Hello World");
		xmlread1();//関数を呼んでいる。
	}


	//返り値が無い関数。VBで言うSUB
	public static void xmlread1(){
		try
		{

			//アプリケーション実行パス
			//new File( "." ).getAbsoluteFile().getParent()で取得できるが
			//ただ単に、ファイル名を書けば同フォルダのファイルを参照できるようだ。
			//String Fs = new File( "." ).getAbsoluteFile().getParent() + "\\mysqlconnect.xml";
			String Fs = "mysqlconnect.xml";

			DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

			DocumentBuilder builder = dbf.newDocumentBuilder();

	  		Document xmldc = builder.parse(new File(Fs));

			NodeList nlist =xmldc.getChildNodes();

			//ノードリストからノードをとって
			Node X_node	= 	nlist.item(0);

			NodeList ch_nlist;

			//System.out.println( X_node.getFirstChild().getTextContent());

			ch_nlist = ((Element)X_node).getElementsByTagName("Server");
			ServerPath = ch_nlist.item(0).getFirstChild().getTextContent();

			ch_nlist = ((Element)X_node).getElementsByTagName("User");
			User = ch_nlist.item(0).getFirstChild().getTextContent();

			ch_nlist = ((Element)X_node).getElementsByTagName("Password");
			Password = ch_nlist.item(0).getFirstChild().getTextContent();




		}
		catch (Exception er)
		{
	  		er.printStackTrace();
		}

	}

	public String getServerPath() {
		return ServerPath;
	}
	/*
	public void setServerPath(String serverPath) {
		ServerPath = serverPath;
	}
*/
	public String getUser() {
		return User;
	}
	/*
	public void setUser(String user) {
		User = user;
	}
 	*/
	public String getPassword() {
		return Password;
	}
	/*
	public void setPassword(String password) {
		Password = password;
	}
	*/

}


残るは、このクラスの使い方だが、 下記のようにNEWして使えばOK。
Javaをよく知っている人が聞いたら怒るかも知れないけれど、
たぶんこれで、基本のキは把握できたのでは?
と勝手に思う。

btnNewButton = new Button(this, SWT.NONE);
		btnNewButton.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseDown(MouseEvent e) {
				
				//XML読み込みクラス
				xmlread xr = new xmlread();
				System.out.println(xr.getPassword());
				System.out.println(xr.getServerPath());
				System.out.println(xr.getUser());
				
			}
		});


VB Tips And Sample(HOME)VBプログラマの為のJava入門