Form login yang saya bahas di sini adalah salah satu bagian dari program chating yang saya buat jadi ini saya anggap sebagi salah satu bab dari aplikasi chating, karena pada awal kita melakukan proses untuk chating kita akan melakukan registrasi dulu, apakah user kita sudah terdaftar atau belum.langkah pertama yang akan kita lakukan adalah dengan membuat sebuah halaman login.persiapan :

  1. Download ExtJs.
  2. Install apache tomcat.
  3. untuk editor penulis menggunakan dreamweaver dan aptana kalo belum punya tanya sama mbah google.
  4. PostgreSQL sebagai database server.
  5. sebuah komputer itu pasti.

Buat foolder baru di webapps pada tomcat anda dengan nama chatextjs, dan buat folder js di dalamnya. lalu kopikan library ExtJs ke dalam folder js anda

  1. adapter
  2. resources
  3. ext-all.js
  4. ext-core.js

Sebelum kita lanjutkan mari kita buat database dulu pada postgreSQL kita masuk ke dalam postgreSQL dan create database chatextjs, ingat di dalam postgres ini sama dengan bahasa C jadi penulisan huruf besar kecil akan berbeda.setelah membuat database buat sebuah table tulis source di bawah ini:

CREATE TABLE "public"."userproject" (
  "kduser" SERIAL,
  "nama" VARCHAR(30),
  "katakunci" CHAR(32),
  "kddepart" CHAR(3),
  "tingkat" SMALLINT,
  "telp" VARCHAR(20),
  "email" VARCHAR(30),
  "status" BOOLEAN,
  "lastlogin" TIMESTAMP WITHOUT TIME ZONE,
  "kduseratas" INTEGER,
  "kduserentry" INTEGER,
  "tglentry" TIMESTAMP WITHOUT TIME ZONE DEFAULT now(),
  "wewenang" SMALLINT DEFAULT 9,
  CONSTRAINT "userproject_pkey" PRIMARY KEY("kduser")
) WITHOUT OIDS;
COMMENT ON COLUMN "public"."userproject"."wewenang"IS '1 : Admin 9: user Biasa';

isi data dengan default contoh :Insert into userproject (nama,katakunci) values(’admin’,md5(’admin’));sekarang buat folder koneksi dan chat di dalam folder chatextjs.buat file koneksi.jsp dan kopikan source dibawah ini :

<%@ page import="java.sql.*"%>
<%@page import="java.text.SimpleDateFormat"%>
<%
class clsKoneksi{
 public clsKoneksi() {
        //koneksi=getFile();
    }

 public String[] strKoneksi = {"org.postgresql.Driver","jdbc:postgresql://localhost:5432/chatextjs","userkamu","passwordkamu"};

}

class classDB {
    /** Creates a new instance of classDB */
    public classDB(String [] Koneksi) {
        koneksi = Koneksi;
        cobaKoneksi(Koneksi);
    }
    public void cobaKoneksi(String [] koneksi) {
        try {
            Class.forName(koneksi[0]);
            con = DriverManager.getConnection(koneksi[1],koneksi[2],koneksi[3]);
        } catch(java.lang.ClassNotFoundException e) {
            System.out.println("Koneksi Driver ODBC Gagal");
            System.out.println(e.getMessage());
        } catch(java.lang.NullPointerException e) {
        } catch(Exception exc){}
    }
    public void ExecSQL(String perintahSQL) {
        try {
            stmt = con.createStatement();
            stmt.executeUpdate(perintahSQL);
            stmt.close();
            //con.close();
        } catch(SQLException ex) {
            System.err.println("SQLException: " + ex.getMessage());
        }
    }
    public Object[][] getObjectRS(String SQL) {
        ResultSet rs =null;
        Object[][] Isi = new Object[1][];;
        //System.out.println("SQL di kelasDB " + SQL);
        //        int [] tipeDataKolom = new int[20];
        int baris =0;
        try {
            stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
            rs = stmt.executeQuery(SQL);
            // untuk mengetahui berapa kolom dalam hasil ResultSet
            ResultSetMetaData metaData = rs.getMetaData();
            jmlKolom = metaData.getColumnCount();
            for(int i=0; i<jmlKolom; i++) {
                namaKol[i]=metaData.getColumnName(i+1);
            }
            rs.last();
            jmlBaris = rs.getRow();
            Isi = new Object[jmlBaris][];
            rs.first();
            Isi [baris] = new Object[jmlKolom];
            for(int i=0; i<jmlKolom; i++) {
                if (metaData.getColumnType(i+1) == 93 )
                    Isi[baris][i] = (formatTGL.format(rs.getDate(i+1))==null?"":formatTGL.format(rs.getDate(i+1)));
                    //(rs.getString("seksi")==null?"":rs.getString("seksi").trim())
                else if (
                metaData.getColumnType(i+1) == -6 ||        // -6 tinyint
                metaData.getColumnType(i+1) == 5  ||        // 5 smallint
                metaData.getColumnType(i+1) == 4 )         // 4 int
                    Isi[baris][i] = new Integer(rs.getInt(i+1));
                else if (metaData.getColumnType(i+1) == 3 ||     //3 money
                metaData.getColumnType(i+1) == 7 )          //7 real
                    Isi[baris][i] = new Double(rs.getDouble(i+1));
                else
                    Isi[baris][i] = new String(rs.getString(i+1)==null?"":rs.getString(i+1));
            }
            baris++;
            ///Isi data ke Obyek
            while (rs.next()) {
                Isi [baris] = new Object[jmlKolom];
                for(int i=0; i<jmlKolom; i++) {
                    if (metaData.getColumnType(i+1) == 93 )
                        //Isi[baris][i] = formatTGL.format(rs.getDate(i+1));
                        Isi[baris][i] = (formatTGL.format(rs.getDate(i+1))==null?"":formatTGL.format(rs.getDate(i+1)));
                    else if (
                    metaData.getColumnType(i+1) == -6 ||        // -6 tinyint
                    metaData.getColumnType(i+1) == 5  ||        // 5 smallint
                    metaData.getColumnType(i+1) == 4 )         // 4 int
                        Isi[baris][i] = new Integer(rs.getInt(i+1));
                    else if (metaData.getColumnType(i+1) == 3 ||     //3 money
                    metaData.getColumnType(i+1) == 7 )          //7 real
                        Isi[baris][i] = new Double(rs.getDouble(i+1));
                    else
                        Isi[baris][i] = new String(rs.getString(i+1)==null?"":rs.getString(i+1));
                }
                baris++;
            }
            stmt.close();
        } catch(SQLException ex) {
            System.err.println("SQLException -1: " + ex.getMessage());
        } catch(Exception ex) {
            System.err.println("SQLException -2: " + ex.getMessage());
        }
        return Isi;
    }
    public Object[] getSatuRekord(String SQL) {
        ResultSet rs =null;
        Object[] Isi = new Object[20];
        //        int [] tipeDataKolom = new int[20];
        int baris =0;
        String kata ="";
        try {
            ///con = DriverManager.getConnection(koneksi[1],koneksi[2],koneksi[3]);
            stmt = con.createStatement();
            rs = stmt.executeQuery(SQL);
            // untuk mengetahui berapa kolom dalam hasil ResultSet
            ResultSetMetaData metaData = rs.getMetaData();
            jmlKolom = metaData.getColumnCount();
            tipeDataKol = new int[jmlKolom];
            ///Isi data ke Grid
            while (rs.next()) {
                Isi [baris] = new Object[jmlKolom];
                for(int i=0; i<jmlKolom; i++) {
                    if (metaData.getColumnType(i+1) == 93 )
                        Isi[i] = formatTGL.format(rs.getDate(i+1));
                    else if (
                    metaData.getColumnType(i+1) == -6 ||        // -6 tinyint
                    metaData.getColumnType(i+1) == 5  ||        // 5 smallint
                    metaData.getColumnType(i+1) == 4 )         // 4 int
                        Isi[i] = new Integer(rs.getInt(i+1));
                    else if (metaData.getColumnType(i+1) == 3 ||     //3 money
                    metaData.getColumnType(i+1) == 7 )          //7 real
                        Isi[i] = new Double(rs.getDouble(i+1));
                    else if (metaData.getColumnType(i+1) == 1 || metaData.getColumnType(i+1) == 12 )
                        Isi[i] = new String((kata=rs.getString(i+1))==null?"": kata );
                    else
                        Isi[i] = null;
                    //                        System.out.println(Isi[i].toString());
                }
                baris++;
            }
            stmt.close();
        } catch(SQLException ex) {
            System.err.println("SQLException: " + ex.getMessage());
        }
        return Isi;
    }
    public int getJumlahRekord(String SQL) {
        ResultSet rs =null;
        int baris=0;
        try {
            ///con = DriverManager.getConnection(koneksi[1],koneksi[2],koneksi[3]);
            stmt = con.createStatement();
            rs = stmt.executeQuery(SQL);
            // hitung data yang cocok
            while(rs.next()) {
                baris = rs.getInt(1);
            }
            stmt.close();
        } catch(SQLException ex) {
            System.err.println("SQLException: " + ex.getMessage());
        }
        return baris;
    }
    public void tutupKoneksi() {
        try {
            con.close();
        }catch (Exception exc ) {}
    }
    public int [] getTipeDataKolom() {
        return tipeDataKol;
    }
    public String [] getNamaKolom() {
        return namaKol;
    }
    public int getJmlKolom() {
        return jmlKolom;
    }
    public int getJmlBaris() {
        return jmlBaris;
    }
    public ResultSet setRec(String SQL){
        ResultSet rst=null;
        try{
            stmt = con.createStatement();
            rst = stmt.executeQuery(SQL);
        }catch(SQLException sqlE){
            System.out.print(sqlE.getMessage());
        }
        return rst;
    }
    public Connection con;
    public int limit=100;
    Statement stmt;
    String[] koneksi;
    SimpleDateFormat formatTGL = new SimpleDateFormat("MM-dd-yyyy");
    int jmlKolom,jmlBaris;
    int [] tipeDataKol;
    String [] namaKol= new String[20];
}
%>

Setelah anda membuat file koneksi buat sebuah file index.jsp pada folder chatextjs/chat/index.jsp ketik koding di bawah ini:

<%
	//Buat sesion
	HttpSession ses = request.getSession(true);
	ses.setMaxInactiveInterval(360);
	try{
		String[] sesi = {""};
		ses.setAttribute("user",sesi);

	}catch(Exception ex){}
%>
<html>
<head>
<link rel="stylesheet" type="text/css" href="../css/display.css">
<link rel="stylesheet" type="text/css" href="../js/resources/css/ext-all.css"/>
<!-- GC -->
<!-- LIBS -->
<script type="text/javascript" src="../js/adapter/ext/ext-base.js"></script>
<!-- ENDLIBS -->
<script type="text/javascript" src="../js/ext-all.js"></script>
<!-- Common Styles for the examples -->
<script type="text/javascript" src="index.js"></script>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

<title>Login Room</title>
</head>
<body>
</body>
</html>

Buat juga file index.js yang isinya seperti di bawah ini :

// JavaScript Document
Ext.SSL_SECURE_URL="../images/net.png";
Ext.BLANK_IMAGE_URL="../images/net.png";
Login = function(){
	var dialog, form;
	return{
		Init:function(){
			var logoPanel = new Ext.Panel({
				baseCls: 'x-plain',
				bodyStyle: 'background:#f9f9f9 url(../images/Voice.png) no-repeat center center;',
		        region: 'center'
			});

			var formPanel = new Ext.form.FormPanel({
		        baseCls: 'x-plain',
		        baseParams: {
		        	module: 'login'
		        },
		        bodyStyle: 'background:#f9f9f9 none; color:#222; padding:5px 35px;',
		        defaults: {
		        	width: 150
		        },
		        defaultType: 'textfield',
		        frame: false,
		        height: 70,
		        items: [{
		            fieldLabel: 'User Name',
		            name: 'user',
		            value: 'admin'
		        },{
		            fieldLabel: 'Password',
		            inputType: 'password',
		            name: 'pass',
		            value: 'admin'
		        }],
		        labelWidth:80,
		        region: 'south'
		    });

		   dialog = new Ext.Window({
		        buttons: [{
		        	handler: function(){
		        		form.submit({
							url: 'cekLogin.jsp',
							waitMsg:'Please Wait...',
							reset:true,
							success:Login.Success,
							failure:function() {
								Ext.MessageBox.alert('Status','User atau Password salah');
							},
							scope:Login
						});
		        	},
		        	scope: Login,
		            text: 'Login'
		        }],
		        buttonAlign: 'right',
		        closable: false,
		        draggable: true,
		        height: 350,
		        id: 'login-win',
		        layout: 'border',
		        minHeight: 350,
		        minWidth: 330,
		        plain: false,
		        resizable: true,
		        items: [
		        	logoPanel,
		        	formPanel
		        ],
				title: 'Chat Login',
		        width: 330
		    });

			form = formPanel.getForm();

		    dialog.show();
		},

		Success: function(f,a){
            //Ext.MessageBox.alert('Confirm', a.result.info);
            if(a && a.result){
				dialog.destroy(true);
				window.location = 'main/';
				//window.open('menuutama/main.jsp', '', 'fullscreen=yes, scrollbars=auto');
			}
		}
	};
}();

Ext.BasicForm.prototype.afterAction=function(action, success){
	this.activeAction = null;
	var o = action.options;
	if(o.waitMsg){
		Ext.MessageBox.updateProgress(1);
		Ext.MessageBox.hide();
	}
	if(success){
		if(o.reset){
			this.reset();
		}
		Ext.callback(o.success, o.scope, [this, action]);
		this.fireEvent('actioncompleted', this, action);
	}else{
		Ext.callback(o.failure, o.scope, [this, action]);
		this.fireEvent('actionfailed', this, action);
	}
}
Ext.onReady(Login.Init, Login, true);

Karena pada program di atas memanggil cekLogin.jsp untuk proses pengecekan nya buat juga file cekLogin.jsp :

<%@ include file="../koneksi/koneksi.jsp" %>
<%
	String[] koneksi=new clsKoneksi().strKoneksi;
	classDB kelasDB=new classDB(koneksi);
	String usr=request.getParameter("user");
	String pswd=request.getParameter("pass");
	//Buat sesion
	HttpSession ses = request.getSession(true);
	ses.setMaxInactiveInterval(3600);
	try{
		Object[] isi=kelasDB.getSatuRekord("select * from tools.fn_login('" + usr + "','" + pswd + "')");
		//out.println("Baru2");
		if(isi[0].toString().trim().equals("1")){
			String[] sesi = {usr};
			ses.setAttribute("user",sesi);
			out.println("{success:true}");
		}else{
			String[] sesi = {""};
			ses.setAttribute("user",sesi);
			out.println("{success:false}");
		}
	}catch(Exception ex){}
%>

Nah sampai di sini program sudah mendekati jadi, tapi pasti ada pertanyaan dari pembaca trus gimana masalah scuritynya wah ini ada dosen saya yang bilang security bukanlah product tapi proses nah saya coba memanfaatkan kemampuan dari postgreSQL yaitu dengan membuatkan sebuah function untuk proses login yaitu  fn_login yang terletak pada schema tools pada postgreSQL untuk source anda dapat kopi dari bawah ini :

CREATE OR REPLACE FUNCTION "tools"."fn_login" (usr varchar, pass varchar) RETURNS smallint AS
$body$
declare
  hasil smallint;
begin
  hasil :=0;
  select count(*) into hasil from userproject where userproject.nama=usr
         and userproject.katakunci=md5(pass);
  if not found then
     hasil :=0 ;
  end if;
  return (hasil);
end;
$body$
LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;

Ok sederhana kan functionya. setelah semua siap tinggal jalankan. Selamat mencoba….

Untuk dapat mengikuti perjalanan mbahsomo dan tulisan - tulisannya

silakan masuk ke http://mbahsomo.ucoz.com

Posted by mbahsomo, filed under Pemrograman. Date: September 11, 2008, 7:20 pm | 1 Comment »

extjs

Beberapa kali saya ditanya oleh teman tentang tutorial ExtJs, jujur saja sebenarnya saya juga kurang begitu ngerti tentang ExtJs. Dari beberapa pertanyaan tersebut saya berusaha untuk belajar, terutama php, masalahnya saya juga kurang begitu menguasai php juga, biasanya saya pake program ya pake Visual Basic, Delphi dan sedikit java. Itupan hanya sekedar bisa saja.

Mulailah saya download ExtJs dan sedikit memodifikasi dan membaca tutorialnya. Pada dasarnya format ExtJs adalah aray jadi semua penulisan javascript yang digunakan berbentuk array yang tersetruktur.kalo kita lihat pelisan kodingnya pasti merasa pusing, sama saya pusing. Untuk memberi solisi agar kita tidak pusing ada beberapa hal yang saya lakukan.

Karena saya terbiasa menggunakan program dengan klik dan drag maka saya juga merasa sangat kesulitan sekali, berawal dari itu saya berusaha mencari solusi nah akhirnya ketemu juga ExtGuiBuilder yang menurut saya sangat membantu dalam proses pembuatan program ExtJs ini.

Langkah – langkah pembuatan program sederhana ini adalah sebagai berikut :

  1. Jalankan apache dan mysql.

  2. Buat folder baru di htdocs misal dengan nama latihanextjs.

  3. Kopikan library extjs (resources, adapter, ext-all.js ) ke folder js.

  4. Buat database baru di mysql dengan nama extjs dan buat sekalian table nya dengan si sebagai berikut :

    /*Buat table baru*/

    CREATE TABLE `tblkaryawan` ( `nopeg` char(10) NOT NULL, `nama` varchar(30) default NULL, `alamat` varchar(50) default NULL, `keterangan` varchar(50) default NULL, PRIMARY KEY (`nopeg`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; — – Dumping data for table `tblkaryawan`

    – isi data ke tblkaryawan

    INSERT INTO `tblkaryawan` (`nopeg`, `nama`, `alamat`, `keterangan`) VALUES

    (’2008.08.01′, ‘SUGIK PUJA KUSUMA’, ‘SURABAYA’, ‘OK DEH’),

    (’2008.08.02′, ‘ANGGA PUJA KUSUMA’, ‘SURABAYA’, ‘OK DEH’), (’2008.08.03′, ‘POYEN PUJA KUSUMA’, ‘SURABAYA’, ‘OK DEH’), (’2008.08.04′, ‘ANDI PUJA KUSUMA’, ‘SURABAYA’, ‘OK DEH’), (’2008.08.05′, ‘EKO PUJA KUSUMA’, ‘SURABAYA’, ‘OK DEH’), (’2008.08.06′, ‘HADI PUJA KUSUMA’, ‘SURABAYA’, ‘OK DEH’), (’2008.08.07′, ‘SUGENG PUJA KUSUMA’, ‘SURABAYA’, ‘OK DEH’), (’2008.08.08′, ‘ALI PUJA KUSUMA’, ‘SURABAYA’, ‘OK DEH’), (’2008.08.09′, ‘P-IJO PUJA KUSUMA’, ‘SURABAYA’, ‘OK DEH’), (’2008.08.10′, ‘AHMAD PUJA KUSUMA’, ‘SURABAYA’, ‘OK DEH’), (’2008.08.11′, ‘BUDI PUJA KUSUMA’, ‘SURABAYA’, ‘OK DEH’), (’2008.08.12′, ‘JULIA PUJA KUSUMA’, ‘SURABAYA’, ‘OK DEH’), (’2008.08.13′, ‘GUNTUR PUJA KUSUMA’, ‘SURABAYA’, ‘OK DEH’), (’2008.08.14′, ‘YUDI PUJA KUSUMA’, ‘SURABAYA’, ‘OK DEH’), (’2008.08.15′, ‘RAHMAN PUJA KUSUMA’, ‘SURABAYA’, ‘OK DEH’);

  5. Buat juga sebuah file index.html, index.php dan index.jsp

    kopikan koding dibawah ini ke index.html

    <html>

    <head>

    <title>Latihan ExtJs</title>

    <link rel=”stylesheet” type=”text/css” href=”js/resources/css/ext-all.css” />

    <script type=”text/javascript” src=”js/adapter/ext/ext-base.js”></script>

    <script type=”text/javascript” src=”js/ext-all.js”></script>

    <script type=”text/javascript” src=”index.js”></script>

    </head>

    <body>

    </body>

    </html>

    kopikan koding dibawah ini ke index.php

    <?php

    mysql_pconnect(”localhost”, “root”, “java”) or die(”Could not connect”);

    mysql_select_db(”extjs”) or die(”Could not select database”);

     

    $rs = mysql_query(”SELECT * FROM tblkaryawan”);

     

    $arr = array();

    while($obj = mysql_fetch_object($rs)) {

    $arr[] = $obj;

    }

     

    echo json_encode($arr);

     

    ?>

    kopikan koding dibawah ini ke index.js

    // JavaScript Document

    //var rectmp,store,grid, thn;

    //var tmptitip=”0014″;

    Ext.onReady(function(){

    Ext.QuickTips.init();

    //——————————————————

    // create the Data Store

    store = new Ext.data.JsonStore({

    url:’index.php’,

    id: ‘nopeg’,

    //totalProperty: ‘total’,

    //root: ‘nopeg’,

    fields: [

    {name:'nopeg'},

    {name:'nama'},

    {name:'alamat'},

    {name:'keterangan'}

    ],

    //sortInfo: {field: ‘company’, direction: ‘ASC’},

    remoteSort: true

    });

    //store.setDefaultSort(’kodebarang’, ‘desc’);

    //Membuat text untuk pencarian data

    grid = new Ext.grid.GridPanel({

    store: store,

    loadMask: true,

    columns: [new Ext.grid.RowNumberer() ,

    {header: "NOPEG", width: 70, dataIndex: 'nopeg', sortable: true},

    {header: "NAMA", width: 150, dataIndex: 'nama', sortable: true},

    {header: "ALAMAT", width: 100, dataIndex: 'alamat', sortable: true},

    {header: "KETERANGAN", width: 70, dataIndex: 'keterangan', sortable: true}

    ],

    sm: new Ext.grid.RowSelectionModel({

    singleSelect: true,

    listeners: {

    rowselect: function(sm, row, rec) {

    rectmp=rec;

    Ext.getCmp(”frm_add”).getForm().loadRecord(rec);

    }

    }

    }),

     

    viewConfig: {

    forceFit:false //auto width

    },

    baseCls: ‘x-plain’,

    region: ‘center’

    });

     

    store.load();

    var win = new Ext.Window({

    closable: false,

    draggable: true,

    height: 400,

    layout: ‘border’,

    minHeight:400,

    minWidth: 430,

    plain: false,

    resizable: false,

    closable:true,

    maximizable:true,

    minimizable:true,

    items: [

    grid

    ],

    title: ‘Daftar Karyawan’,

    width: 430

    });

    win.show();

    });

  6. Sampai disini semua telah selesai n anda tinggal memanggil dengan mengetik http://localhost/ latihanextjs

 

daftar pustaka http://www.extjs.com

Posted by mbahsomo, filed under Pemrograman. Date: Agustus 28, 2008, 2:44 pm | 1 Comment »

SQL Server merupan software database kebanggan Microsoft, banyak kampus - kampus yang pada materi kuliahnya selalu menggunakan SQL Server. Termasuk dulu di kampus Saya selalu mengajarkan SQL Server  pada materi databasenya. berdasar pengetahuan yang ada saya berusaha sedikit mempelajari tentang SQL - Server, terutama saat saya mendengar kabar - kabar tentang kelemahan SQL-Server, dari penelitian saya ada beberapa store procedure yang sangat berbahaya yang bisa digunakan para cracking untuk merusak server kita. 

Berikut adalah procedure - procedure yang sudah di sediakan oleh SQL Server yang terdapat pada database master 

 

 Gambar 2

Gambar –> 

 

 

 

gambar 

 

 

 

Download artikel lengkap  

Posted by mbahsomo, filed under Pemrograman. Date: Agustus 16, 2008, 2:21 pm | No Comments »

 Setelah mengalamai beberapa percobaan akhirnya pada versi 1.1 kamus bahasa jawa sudah sedikit mengalami perubahan termasuk tambahan dalam aksara jawa.berikut screen shotnya.

Kamus V 1.1

Merdeka 

Posted by mbahsomo, filed under Pemrograman. Date: Agustus 16, 2008, 12:41 pm | 2 Comments »

08  Agu
ExtJS 2.2.0

Masih Ingat dengan ExtJS, tentu masih pada tanggal 4 agustus kemarin ExtJs telah membuat release terbaru yaitu 2.2.0. berikut sedikit kutipan dari ExtJs pingin download tinggal Klick Disini

Release Notes for Ext 2.2.0

Release Date: August 4, 2008Current Version: 2.2.0 (rev 2547) Previous Version: 2.1.0 (rev 2042)

Overview

  • Full Firefox 3.0 support
  • Added Ext.History component and sample
  • Completely refactored Checkbox and Radio controls
  • Added CheckboxGroup and RadioGroup components and sample
  • Added MultiSelect and ItemSelector extensions and sample
  • Added FileUploadField extension and sample
  • Added XMLTreeLoader extension and sample
  • Added several new Drag-and-Drop samples
  • Added GMapPanel extension and sample
  • Grid performance improvements
  • Many general improvements and bug fixes
  • Extensive documentation improvements
  • Various locale file updates

Change Log

  • Adapters
    • Ext Base
      • Added UTF-8 to defaultPostHeader to support international char sets properly
  • Ext.core
    • Ext
      • New properties for isGecko2 and isGecko3
      • Updated useShims property to be Gecko2-only on Mac
      • Fix for isArray and array check fix in Ext.each
    • Ext.Element
      • Event registration improvements
      • Updated Gecko/Mac overflow auto fix to be scoped to Gecko2 only
      • Shim border fix for IE8
    • Ext.EventManager
      • Event handler registration logic refactored to fix DOM leak issues
    • Ext.Updater
      • Now extends Ext.util.Observable
      • New overrideable getDefaultRenderer method
      • Fix in update method to preserve passed in config options correctly
  • Ext.data
    • Ext.data.Connection
      • New disableCachingParam config
    • Ext.data.Record
      • Fixed type coercion bug in isModified
    • Ext.data.Tree
      • New Node.isExpandable method
  • Ext.util
    • Ext.util.ClickRepeater
      • Fixed scope issue when unregistering interal event handlers
    • Ext.util.Date
      • Various date format fixes
    • Ext.util.Format
      • Fix in htmlDecode to handle ampersands correctly
      • New nl2br (newline to BR) function
    • Ext.util.History
      • New component
    • Ext.util.KeyMap
      • Added stopEvent as a valid config option for the addBinding method
  • Ext.widgets
    • Ext.Button
      • Fixes to minimize mouse handlers created on buttons
    • Ext.Component
      • New initPlugin method for more flexible plugin initialization
      • Fix to ignore state events if stateful=false
    • Ext.Container
      • Updated onDestroy to call destroy on the container’s layout if available
      • Fixed default scope passed to the cascaded function in Container.cascade
    • Ext.DatePicker
      • Marked constrainToViewport config as deprecated (it’s not currently used)
      • Changed disabledDaysText and disabledDatesText to default to “Disabled” instead of “”
      • New configs for minDate, maxDate, disabledDays, disabledDaysRE and disabledDates
      • New methods setDisabledDates, setDisabledDays, setMinDate and setMaxDate
      • New showToday config to show/hide the Today button and footer
      • Fixed selectToday to check for disabled Today button before changing the date
    • Ext.DataView
      • New mouseenter and mouseleave events
      • New trackOver config to enable mouse events
      • Fix in getNodes to calculate the end node correctly
    • Ext.Editor
      • New canceledit event
      • Fixed issue with TriggerField editors not blurring correctly on key navigation
      • Fixed editor wrapper element scrollbar issue in FF2/Opera
    • Ext.PagingToolbar
      • Added beforechange and change events and changePage method
      • Fixed handling of 0 entered into the page field
    • Ext.Panel
      • Change to set ownerCt on buttons added to panels
      • Fix for FF2/Mac scroll bar issue on contained items
      • Fix panel disabling support in IE
      • Fixed in destruction order of internal components
    • Ext.ProgressBar
      • Fix to only attempt progress updates if rendered
      • Added support for the text config in the wait method
      • Fix for preserving the proper progress width in ratio to the value on resize
    • Ext.QuickTips
      • Added autoRender support to fix initial display issues
    • Ext.Resizable
      • Change to render the resize proxy to the document body instead of as a sibling to its element so it doesn’t interfere with Component position calculations
    • Ext.Slider
      • New dragging property and changecomplete event
      • Fixes for slider with minValue != 0
      • Fix for preserving the proper thumb position in ratio to the value on resize
    • Ext.StatusBar
      • Fix for setting the proper default icon on clear
    • Ext.TabPanel
      • Fix to position the tab strip spacer element correctly for tabPosition bottom
      • Fix for FF3 to raise the contextmenu event correctly on tab strip right-click
    • Ext.Tip
      • Fixed IE7 repaint bug on initial show
    • Ext.Toolbar
      • Fix in addField to add the fields to the items collection rather than the Toolbar items
    • Ext.Window
      • Added doLayout call on resize
    • Ext.dd.DDCore
      • Fixed null error in isValidHandleChild
    • Ext.dd.ScrollManager
      • Fix to enable overriding scroll frequency in the scroll config object
    • Ext.dd.StatusProxy
      • Fix to remove float style from ghost elements when adding them to the proxy to prevent proxy box collapse
    • Ext.form.Checkbox
      • Completely refactored to support new visual styles
    • Ext.form.CheckboxGroup
      • New component
    • Ext.form.DateField
      • New showToday config to show/hide the Today button and footer on the associated DatePicker
      • New methods setDisabledDates, setDisabledDays, setMinValue and setMaxValue
    • Ext.form.Field
      • Fix to prevent initializing the data value to emptyText
      • Fix to preserve the originalValue on init
      • Fix for odd FF/Win issue when changing OS window focus that disabled editing
      • Change to default error messages to basic tooltips if no field container el is available
    • Ext.form.FormPanel
      • Change to make the form tag into the panel’s body element
    • Ext.form.HtmlEditor
      • Scoped disabling the font, link, lists and source edit buttons to Safari2 only (Safari3 is OK)
      • Various fixes to improve initialization
      • Fix to prevent multiple event handlers from being setup (resolved double line break issue in IE)
      • Fixed issue of IE allowing toolbar commands to apply to content outside the editor body
    • Ext.form.Label
      • Added setText method
    • Ext.form.TextArea
      • Fixed onKeyUp not calling its superclass method
    • Ext.form.TimeField
      • Fix for broken field on DST boundary dates
    • Ext.form.TriggerField
      • Fix for trigger icon alignment to field in IE
      • Fixed missing scope to properly remove the document mousedown handler after mimicing blur
    • Ext.form.Radio
      • Completely refactored to support new visual styles
    • Ext.form.RadioGroup
      • New component
    • Ext.form.TextField
      • Fix for selectOnFocus support
      • Fixed broken key filtering when using maskRe in non-FF browsers
    • Ext.grid.ColumnModel
      • Fixed configchange event declaration name typo
    • Ext.grid.EditorGrid
      • Fix to align editors correctly with mixed-height row content
      • Fixed bug in preEditValue that prevented html decoding when needed
      • Added onDestroy method to clean up column model’s editors on destroy
    • Ext.grid.GridPanel
      • New deferRowRender config
    • Ext.grid.GridView
      • New configs for controlling cell and row selector class and depth
      • Fixes to sync the invisible focus element on row add/remove actions
      • Moved some rendering logic to afterRender (improved performance)
    • Ext.layout.BorderLayout
      • Added destroy method to clean up splitbars created by layout
    • Ext.layout.ColumnLayout
      • Target size calculation fix for IE
    • Ext.layoutContainerLayout
      • Added support for subclass destroy functions
    • Ext.menu.Item
      • Improved tolerance for mousing from a menu to its submenu without dismissing the submenu too quickly while passing over other menu items
    • Ext.menu.Menu
      • New ignoreParentClicks config to ignore clicks on menu items with child menus
    • Ext.menu.TextItem
      • Updated constructor to support config object in addition to just text
    • Ext.tree.TreeDragZone
      • Fix to honor the hlDrop config on invalid drop repair
    • Ext.tree.TreeDropZone
      • Fixed highlight calls to check enableFx first to avoid possible errors
    • Ext.tree.TreeEditor
      • Fixed editor alignment to node when autoScroll is on and the node is outside the scroll area
    • Ext.tree.TreeLoader
      • Fixed type coercion bug in isLoading
      • Updated createNode to support new TreePanel.nodeTypes
    • Ext.tree.TreeNode
      • New getLoader method
      • Fixed null error in destroy when no child nodes present
    • Ext.tree.TreeNodeUI
      • Refactored internal support for Ext.data.Node.isExpandable
    • Ext.tree.TreePanel
      • Ability to specify dataUrl or a TreeLoader config in addition to a TreeLoader instance
      • New nodeTypes support for more flexible node declaration and creation

 

Posted by mbahsomo, filed under Pemrograman. Date: Agustus 8, 2008, 5:13 pm | No Comments »

Setelah beberapa hari ini saya merenung dan sedikit belajar tentang ExtJs akhirnya saya baru sempat menuliskan sedikit pengalaman saya membuat program dengan ExtJS ini adalah tutorial saya yang sedikit membahas tentang ExtJs yang sayang gabungkan dengan menggunakan jsp..

Gambar Master Barang

Ini adalah source program yang saya buat

Buat table :

//***************

CREATE TABLE “public”.”tbl_barang” (
“kode_barang” CHAR(10) NOT NULL,
“jenis_barang” VARCHAR(20),
“nama_barang” VARCHAR(30),
“kemasan” VARCHAR(15),
“merk” VARCHAR(20),
CONSTRAINT “tbl_barang_pkey” PRIMARY KEY(”kode_barang”),
CONSTRAINT “tbl_barang_fk” FOREIGN KEY (”jenis_barang”)
REFERENCES “public”.”tbl_jenis_barang”(”jenis_barang”)
ON DELETE NO ACTION
ON UPDATE CASCADE
NOT DEFERRABLE
) WITHOUT OIDS;

// **************

Pertama kita buat file bernama master_barang.jsp

//=====================================================

<%@ include file=”../koneksi/koneksi.jsp” %>
<%@ page import=”java.util.Enumeration” %>
<%
//kuki
String[] koneksi=new clsKoneksi().strKoneksi;
classDB kelasDB=new classDB(koneksi);
String jns=request.getParameter(”txt_jenis”);
String model=request.getParameter(”model”);
String offset=request.getParameter(”offset”);
//String offset_n=”0″;
//String offset_p=”0″;
int max=0,total=0;
try{
//model=model.trim();
Object[][] data=kelasDB.getObjectRS(”select count(*) from tbl_barang”);
total=Integer.parseInt(data[0][0].toString());
max=total-(total%kelasDB.limit);
}catch(Exception x){}
String kepala=”";
Enumeration reqheaders = request.getHeaderNames();
while (reqheaders.hasMoreElements()){
String reqheader = (String)reqheaders.nextElement();
if(reqheader.equals(”referer”)){
kepala=request.getHeader(reqheader);
}
}
String[] nilai=kepala.split(”/”);
kepala=nilai[nilai.length-1];
String tujuan=”";
if(kepala.equals(”main.jsp”)){
tujuan=”";
}else{
tujuan=”<meta http-equiv=\”refresh\” content=\”1;URL=..\\index.jsp\”>”;
}
%>
<html>
<head>
<%//=tujuan%>
<script>
<%
out.println(”var max=” + max + “;”);
out.println(”var offset=” + offset + “;”);
out.println(”var batas=” + kelasDB.limit + “;”);
out.println(”var total=” + total + “;”);
%>
</script>
<meta http-equiv=”Content-Type” content=”text/html; charset=iso-8859-1″>
<title>Master Barang</title>

<link rel=”stylesheet” type=”text/css” href=”../js/resources/css/ext-all.css” mce_href=”../js/resources/css/ext-all.css” />

<!– GC –>
<!– LIBS –>
<script type=”text/javascript” src=”../js/adapter/ext/ext-base.js” mce_src=”../js/adapter/ext/ext-base.js”></script>
<!– ENDLIBS –>

<script type=”text/javascript” src=”../js/ext-all.js” mce_src=”../js/ext-all.js”></script>
<script type=”text/javascript” src=”master_barang.js” mce_src=”master_barang.js”></script>
<!–<script type=”text/javascript” src=”ambiljson.js” mce_src=”ambiljson.js”></script>–>
<!–<script type=”text/javascript” src=”master_jenis_barang.js” mce_src=”master_jenis_barang.js”></script>–>
<link rel=”stylesheet” type=”text/css” href=”master_jenis_barang.css” mce_href=”master_jenis_barang.css” />

<!– Common Styles for the examples –>
<!–<link rel=”stylesheet” type=”text/css” href=”../js/resources/css/xtheme-slate.css” mce_href=”../js/resources/css/xtheme-slate.css”>–>
</head>
<body>
<select name=”jenis_barang” id=”jenis_barang” style=”display: none;”>
<%
Object[][] isidata=kelasDB.getObjectRS(”select * from tbl_jenis_barang”);
for(int brs=0; brs<kelasDB.getJmlBaris(); brs++){
out.println(”<option value=\”" + isidata[brs][0] + “\”>” + isidata[brs][0] + “</option>”);
}
%>
</select>
</body>
</html>

//=====================================================

master_barang.js

//**************************************************************

var rectmp,store,grid;
Ext.onReady(function(){
Ext.QuickTips.init();
var win_add, win_find;
//Membuat Windows untuk tambah data
//Membuat Form
var dtCbo= new Ext.data.Store({
url: ‘isiCbo.jsp’,
reader: new Ext.data.ArrayReader({
id:0
}, [
{name: 'jenis_barang'}
]
)
});
dtCbo.load();
var MyCombo=new Ext.form.ComboBox({
displayField:’jenis_barang’,
fieldLabel: ‘Jenis Barang’,
store: dtCbo,
valueField: ‘jenis_barang’,
editable: false,
typeAhead: true,
mode: ‘local’,
triggerAction: ‘all’,
emptyText:’Choose…’,
selectOnFocus:true,
forceSelection : true,
name:’jenis_barang’,
//anchor:’95%’,
listeners: {
beforerender: function(combo){
MyCombo.setValue(MyCombo.store.getAt(0).data.id); // Ligne finale
// MyCombo.setValue(MyCombo.store.collect(’id’, true)[0]); //pas assez rapide
}
}
});
var frm_add = new Ext.form.FormPanel({
id:’frm_add’,
baseCls: ‘x-plain’,
bodyStyle: ‘background:#f9f9f9 none; color:#222; padding:5px 35px;’,
defaults: {
width: 200
},
defaultType: ‘textfield’,
height: 70,
items: [{
fieldLabel: 'Kode Barang',
name: 'kodebarang',
id: 'kodebarang',
value: ''
},MyCombo
,{
fieldLabel: 'Nama Barang',
name: 'nama_barang',
id: 'nama_barang',
value: ''
},{
fieldLabel: 'Kemasan',
name: 'kemasan',
value: ''
},{
fieldLabel: 'Merk',
name: 'merk',
id:'merk',
value: ''
}],
labelWidth:100,
region: ‘center’,
url: ‘../add/master_barang.jsp’
});
form = frm_add.getForm();
fn_add=function(){
if(!win_add){
//Ext.getCmp(”frm_add”).getForm().loadRecord(rectmp);
win_add = new Ext.Window({
//el:induk,
layout:’fit’,
width:450,
height:250,
closeAction:’hide’,
//plain: true,
modal:true,
resizable :false,
title:’Add data’,
items:[
frm_add
],
buttons: [{
text:'Ok',
disabled:false,
handler: function(){
form.submit({
url: '../add/master_barang.jsp',
waitMsg:'Please Wait...',
reset:true,
success:function(){
win_add.hide();
store.load({params:{start:offset}});
},
failure:function() {
Ext.MessageBox.alert('Status','User atau Password salah');
}
});
}
},{
text: 'Cancel',
handler: function(){
win_add.hide();
}
}]
});
}
//Ext.getCmp(”frm_add”).getForm().loadRecord(rectmp);
win_add.show();
}
//****************************************************
//—————————————————–
//*****************************************************
var frm_find = new Ext.form.FormPanel({
id: ‘frm_find’,
baseCls: ‘x-plain’,
bodyStyle: ‘background:#f9f9f9 none; color:#222; padding:5px 35px;’,
defaults: {
width: 200
},
defaultType: ‘textfield’,
//frame: true,
height: 70,
selectOnFocus: true,
items: [{
fieldLabel: 'Find Data',
name: 'txt_find',
id:'txt_find',
value: ''
}],
labelWidth:70,
region: ‘center’//,
//url: ‘cekLogin.jsp’
});
fn_find=function(){
if(!win_find){
win_find = new Ext.Window({
//el:induk,
layout:’fit’,
width:450,
height:100,
closeAction:’hide’,
//plain: true,
modal:true,
resizable :false,
title:’Find data’,
items:[
frm_find
],
buttons: [{
text:'Ok',
disabled:false,
handler: function(){
var t=document.getElementById('txt_find').value;
store.load({params:{start:0,kondisi:t}});
win_find.hide();
}
},{
text: 'Cancel',
handler: function(){
win_find.hide();
}
}]
});
}
win_find.show();
}
//——————————————————
// create the Data Store
store = new Ext.data.Store({
&;nbsp; // load using HTTP
url: ‘fn_master_barang.jsp’,
//totalProperty: ‘403′
reader: new Ext.data.ArrayReader({
id:0
}, [
{name: 'kodebarang'},
{name: 'jenis_barang'},
{name: 'nama_barang'},
{name: 'kemasan'},
{name: 'merk'},
{name:'delete'}
]
),
// turn on remote sorting
remoteSort: true
//baseParams: {offset: offset}
});
//store.setDefaultSort(’kodebarang’, ‘desc’);
//Membuat text untuk pencarian data
grid = new Ext.grid.GridPanel({
store: store,
columns: [new Ext.grid.RowNumberer() ,
{header: "Kode Barang", width: 120, dataIndex: 'kodebarang', sortable: true},
{header: "Jenis Barang", width: 180, dataIndex: 'jenis_barang', sortable: true},
{header: "Nama Barang", width: 115, dataIndex: 'nama_barang', sortable: true},
{header: "Kemasan", width: 100, dataIndex: 'kemasan', sortable: true},
{header: "Merk", width: 100, dataIndex: 'merk', sortable: true},
{header: "Delete", width: 100, dataIndex: 'delete', sortable: true}
],
sm: new Ext.grid.RowSelectionModel({
singleSelect: true,
listeners: {
rowselect: function(sm, row, rec) {
rectmp=rec;
Ext.getCmp(”frm_add”).getForm().loadRecord(rec);
}
}
}),
viewConfig: {
forceFit:true
},
// inline toolbars
tbar:[{
text:'',
tooltip:'Add a new row',
iconCls:'add',
handler: (function(){
frm_add.getForm().reset()
},
fn_add)
}, '-', {
text:'',
tooltip:'Edit Record',
iconCls:'Edit',
handler: fn_add
},'-',{
text:'',
tooltip:'Delete Datta',
iconCls:'remove',
handler: function (){
var m = grid.getSelections();
//alert(m[0].get(”kodebarang”));
setDelete((m[0].get(”kodebarang”)));
}
},’-',{
text:”,
tooltip:’first Pages’,
iconCls:’first’,
handler:function(){
//window.location=”master_barang.jsp?offset=0″;
store.load({params:{start:0}});
offset=0;
}
},’-',{
text:”,
tooltip:’Prefious Pages’,
iconCls:’prefious’,
handler:function(){
//window.location=”master_barang.jsp?offset=” + offset_p;
if(offset<=0){
offset=0;
}else{
offset-=batas;
}
store.load({params:{start:offset}});
}
},’-',{
text:”,
tooltip:’Next Pages’,
iconCls:’next’,
handler:function(){
if (offset >= max) {
offset = max;
}else {
offset += batas;
}
store.load({params:{start:offset}});
}
},’-',{
text:”,
tooltip:’Last Page’,
iconCls:’last’,
handler:function(){
//window.location=”master_barang.jsp?offset=” + max;
store.load({params:{start:max}});
offset=max;
}
},’-',{
text:”,
tooltip:’Export MS. Word’,
iconCls:’word’,
handler:function(){
window.location =’../koneksi/viewReport.jsp?type=rtf&param=&isiparam=&rpt=jenis_barang.jrxml’;
}
},’-',{
text:”,
tooltip:’Export MS Excel’,
iconCls:’excel’,
handler:function(){
window.location =’../koneksi/viewReport.jsp?type=xls&param=&isiparam=&rpt=master_barang.jrxml’;
}
},’-',{
text:”,
tooltip:’Export PDF’,
iconCls:’pdf’,
handler:function(){
window.location =’../koneksi/viewReport.jsp?type=pdf&param=&isiparam=&rpt=master_barang.jrxml’;
}
},’-',{
text:”,
tooltip:’Print data’,
iconCls:’print’,
handler:function(){
window.location =’../koneksi/viewReport.jsp?type=pdf&param=&isiparam=&rpt=master_barang.jrxml’;
}
},’-',{
text:”,
tooltip:’Refresh’,
iconCls:’refresh’,
handler:function(){
store.load({params:{start:offset}});
}
},’-',{
text:’Find’,
tooltip:’Find Data’,
iconCls:’find’,
handler:fn_find
}],
bbar: new Ext.PagingToolbar({
pageSize: 100,
store: store,
displayInfo: true,
displayMsg: ‘Displaying topics {0} - {1} of {2}’ ,
emptyMsg: “No topics to display”
}),
baseCls: ‘x-plain’,
region: ‘center’
});
grid.on(’rowdblclick’,(
function(sm, row, rec) {
rectmp=rec;
Ext.getCmp(”frm_add”).getForm().loadRecord(rec);
},
fn_add
)
);
store.load({params:{start:offset,limit:batas}});
var win = new Ext.Window({
closable: false,
draggable: true,
height: 400,
layout: ‘border’,
minHeight:400,
minWidth: 630,
plain: false,
resizable: false,
closable:true,
maximizable:true,
minimizable:true,
items: [
grid
],
title: ‘Master Barang’,
width: 630
});
win.show();
});
function setDelete(kode){
var a=Ext.MessageBox.confirm(’Delete’, ‘Are you sure you want to do delete’,
function(btn){
if (btn == ‘yes’) {
store.load({params:{start:offset,del:kode}});
}
}
);
}

//**************************************************************

fn_master_barang.jsp

//**************************************************************

<%@ include file=”../koneksi/koneksi.jsp” %>
<%
String[] koneksi=new clsKoneksi().strKoneksi;
classDB kelasDB=new classDB(koneksi);
String limit=request.getParameter(”limit”);
String kondisi=request.getParameter(”kondisi”);
String del=request.getParameter(”del”);
String mulai=request.getParameter(”start”);
String sql=”";
//out.println(kondisi);
if(kondisi!=null){
sql=”select * from tbl_barang where upper(kode_barang||jenis_barang||nama_barang) “;
sql+=”like upper(’%” + kondisi + “%’) limit ” + kelasDB.limit + ” offset ” + mulai;
}else{
sql=”select * from tbl_barang limit ” + kelasDB.limit + ” offset ” + mulai ;
}
if(del!=null){
kelasDB.ExecSQL(”delete from tbl_barang where kode_barang=’” + del + “‘”);
}
//out.println(sql);
Object[][] isi=kelasDB.getObjectRS(sql);
String js=”["; //\"totalCount\":\"403\",
int rw=0,clm=0;
while(rw<kelasDB.getJmlBaris()){
if(rw>0){
js+=",";
}
js+="[";
clm=0;
while(clm<kelasDB.getJmlKolom()){
if(clm>0){
js+=",";
}
js+="'"+ isi[rw][clm].toString().trim() + “‘”;
clm++;
}
js+=”,’<a href=javascript:setDelete(\”" + isi[rw][0].toString().trim();
js+=”\”)><img src=\”../images/icon/delete.png\”>Delete</a>’”;
js+=”]”;
rw++;
}
js+=”]”;
out.print(js);
%>

//**************************************************************

isiCbo.jsp

//**************************************************************

<%@ include file=”../koneksi/koneksi.jsp” %>
<%
String[] koneksi=new clsKoneksi().strKoneksi;
classDB kelasDB=new classDB(koneksi);
Object[][] isi=kelasDB.getObjectRS(”select * from tbl_jenis_barang”);
String js=”[";
int rw=0,clm=0;
while(rw<kelasDB.getJmlBaris()){
if(rw>0){
js+=",";
}
js+="[";
clm=0;
while(clm<kelasDB.getJmlKolom()){
if(clm>0){
js+=",";
}
js+="'"+ isi[rw][clm].toString().trim() + “‘”;
clm++;
}
js+=”]”;
rw++;
}
js+=”]”;
out.print(js);
%>

//**************************************************************

Posted by mbahsomo, filed under Pemrograman. Date: Juli 30, 2008, 11:42 am | 1 Comment »

Kamus

Kemaren saat dalam perjalan pulang ke kampung halaman ada hal yang menarik perhatian beberapa pedagang sedang menjajakan dagangannya. Anda tau dagangan mereka pasti anda tidak tau deh, kan anda tidak disana. Iya mereka sedang menjual buku – buku kecil mulai dari harga 5 ribu sampai 15 ribu. Dari situ saya melihat sebuah buku sederhana berjudul “PEPAK BAHASA JAWA” setelah membaca sekilas tentang buku itu saya merasa sangat bodoh dan tidak bergunanya saya, sebagai seorang putra Jawa, saya tidak begitu mengerti tentang bahasa, busaya dan mungkin hal – hal yang lain tentang Jawa.
Setelah kejadian itu saya berkeinginan untuk mempelajari
tentang kekayaan budaya kita. Trus tindakan apa yang bisa saya
lakukan untuk membantu saya tidak boleh ber ongkang – ongkang kaki
saya bersedih dan tidak berbuat apa – apa itu namanya omong kosong
bukan cuma pura – pura sedih tapi tidak ada perbuatan yang dapat
memperbaiki semuanya.
Ok lah saya mencoba mencari solusi, setelah lamam merenung
dan bersemedi. Bagaimana kalo saya membuat program kecil untuk
membuat kamus untuk bahasa jawa dan bahasa indonesia ok. Mungkin
ini pekerjaan awal sambil belajar aku bisa menyumbangkan sedikit
ilmu untuk sesama orang jawa yang belum begitu tahu tentang bahasa
Jawa.
Kita siapkan dulu kamus bahasa jawa kita, buatlah sebuah
project dengan nama kamus_bahasa_jawa. Sebelumnya saya beranggapan
semuanya sudah bisa menggunakan Netbean atau sudah menguasai
pemrograman Java. Ok mari kita lanjutkan buat folder di project
kamu dengan nama menu di menu tersebut buat sebuah form pannel
dengan nama displayKamus. Jangan lupa arahkan main menu atau
defoulkan biar program langsung menjalakan form displayKamus.
Tulis coding program di bawah ini :

/*
* mnMenu.java
*
* Created on July 11, 2008, 10:03 PM
*/
package menu;
import kamus.kamus;
/**
*
* @author root
*/
public class displayKamus extends javax.swing.JFrame {
kamus kms;
/** Creates new form mnMenu */
public displayKamus() {
initComponents();
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
// <editorfold
defaultstate=”collapsed” desc=”Generated Code”>
private void initComponents() {

}// </editorfold>
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
kms=new kamus();
String hsl=”";
String[] data=txtAwal.getText().split(” “);
for (int a=0; a< data.length; a++){
System.out.println(”Kata Kirim = ” + data[a]);
hsl = hsl + ” ” + kms.getKamus(data[a]);
}
txtHasil.setText( hsl);
}
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new displayKamus().setVisible(true);
}
});
}
// Variables declaration do
not modify
private javax.swing.JButton jButton1;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JTextArea txtAwal;
private javax.swing.JTextArea txtHasil;
// End of variables declaration
}

Kamus 1

Gambar form displayKamus
Sekarang buatlah sebuah folder lagi di project kamu dengan
nama kamus. Buat juga sebuah class dengan nama kamus.java tulis
coding di bawah ini, dan jangan lupa buat sebuah text file yang
akan kita gunakan sebagai database kita. Letekkan kamus.txt
tersebut di folder src/.
package kamus;
import java.io.*;
import java.util.Scanner;
/**
*
* @author root
*/
public class kamus {
public kamus(){
//kata=Kata;
}
public String getKamus(String str){
String hasil=”",beda=”";
Scanner sc;
int a=0;
boolean ketemu=false;
str=str.toUpperCase();
try {
sc = new Scanner(
new BufferedReader(new FileReader(”src/kamus.txt”)));
while (sc.hasNext()) {
beda = sc.next().trim();
if(str.equals(beda)){
hasil = sc.next().trim();
ketemu=true;
break;
}
}
sc.close();
} catch(Exception e){}
if(ketemu==false)
hasil=str;
return hasil;
}
}

kamus 2

Gambar kamus bahasa jawa.
ok jadilah kamus kita silakan coba dan modifikasi program
ini. Program ini bersifat free dan tidak di perjual belikan.
Informasi lebih lanjut anda daput masuk ke blog saya
http://poyen.uni.cc dan program dapat di download di
http://sugik.4shared.com.

Posted by mbahsomo, filed under Pemrograman. Date: Juli 15, 2008, 12:49 am | 6 Comments »