Tuesday, February 9, 2010

Simple DB Explorer via Java socket

Simple DB Explorer via Java socket

Program dibuat sebagai Pembelajaran tentang java socket.

Kelebihan:
  1. Ringan dan simple karena hanya terdiri dari 6 class
  2. Flexibel karena mampu menangani multiple database(PostgreSql,Oracle,MySql,Ms-SqlServer)
  3. Mampu menganngani multiple Client.
Kekurangan:
  1. Interface/tampilan kurang menarik.
  2. masih terdapat banyak bug.
ScreenShot:

DBServer
DBClient


Yang ingin mencoba atau mengembangkan bisa download project client disini part1,part2,part3,part4,part5,part6,part7

Tuesday, June 16, 2009

Jam Dan Calendar JAVA

Program sederhana untuk menampilkan jam dan calendar

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

/*
* date.java
*
* Created on Jun 17, 2009, 5:55:27 AM
*/

package jamcalendar;
import javax.swing.*;
import java.io.*;
import java.awt.event.*;
import java.util.*;
/**
*
* @author x1m4
*/
public class date extends javax.swing.JFrame {

/** Creates new form date */
public date() {
initComponents();
setResizable(false);
GregorianCalendar sekarang = new GregorianCalendar();
infoWaktu(sekarang);
Jam();
}

/** 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.
*/
@SuppressWarnings("unchecked")
// //GEN-BEGIN:initComponents
private void initComponents() {

lblcalendar = new javax.swing.JLabel();
lbljam = new javax.swing.JLabel();

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setTitle("jam dan calendar");

lbljam.setFont(new java.awt.Font("Tahoma", 1, 20)); // NOI18N
lbljam.setForeground(new java.awt.Color(255, 51, 51));

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(29, 29, 29)
.addComponent(lblcalendar, javax.swing.GroupLayout.PREFERRED_SIZE, 226, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(lbljam, javax.swing.GroupLayout.PREFERRED_SIZE, 126, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(13, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(19, 19, 19)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(lblcalendar, javax.swing.GroupLayout.PREFERRED_SIZE, 24, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(lbljam, javax.swing.GroupLayout.PREFERRED_SIZE, 34, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap(25, Short.MAX_VALUE))
);

pack();
}//
//GEN-END:initComponents


public void infoWaktu(GregorianCalendar cal){
String hari[] = {" ","Minggu","Senin","Selasa",
"Rabu","Kamis","Jumat","Sabtu"};
String bulan[] = {"Januari","Pebruari","Maret","April","Mei","Juni","Juli",
"Agustus","September","Oktober","November","Desember"};

String day = hari[cal.get(Calendar.DAY_OF_WEEK)];
int date = cal.get(Calendar.DATE);
String month = bulan[cal.get(Calendar.MONTH)];
int year = cal.get(Calendar.YEAR);

lblcalendar.setText("Hari "+day+" Tanggal "+date+" "+month+" "+year);
}

public void Jam() {
ActionListener taskPerformer = new ActionListener() {
public void actionPerformed(ActionEvent evt) {
String waktu[] ={"Pagi","Malam"};

String nol_jam = "";
String nol_menit = "";
String nol_detik = "";
// Membuat Tanggal
Calendar dt = Calendar.getInstance();

// Mengambil nilaj JAM, MENIT, dan DETIK Sekarang
int nilai_jam = dt.get(dt.HOUR_OF_DAY);
int nilai_menit = dt.get(dt.MINUTE);
int nilai_detik = dt.get(dt.SECOND);
String wkt = waktu[dt.get(dt.AM_PM)];

if (nilai_jam <= 9) {
// Menambahkan "0" didepannya
nol_jam = "0";
}
// Jika nilai MENIT lebih kecil dari 10 (hanya 1 digit)
if (nilai_menit <= 9) {
// Menambahkan "0" didepannya
nol_menit = "0";
}
// Jika nilai DETIK lebih kecil dari 10 (hanya 1 digit)
if (nilai_detik <= 9) {
// Tambahkan "0" didepannya
nol_detik = "0";
}
// Membuat String JAM, MENIT, DETIK
String jam = nol_jam + Integer.toString(nilai_jam);
String menit = nol_menit + Integer.toString(nilai_menit);
String detik = nol_detik + Integer.toString(nilai_detik);

// Menampilkan pada Layar
lbljam.setText(jam +" : "+menit+" : "+detik);
}
};
// Timer
new javax.swing.Timer(1000, taskPerformer).start();
}
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new date().setVisible(true);
}
});
}

// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JLabel lblcalendar;
private javax.swing.JLabel lbljam;
// End of variables declaration//GEN-END:variables

}

Monday, June 15, 2009

Decompile program java

suatu kali saya browsing dan menemukan satu aplikasi java dalam bentuk jar tapi masih gak bisa masuk n di jalankan gara gara harus input user sama passwordnya dulu, ih pusing....
trus saya coba exctract aplikasi tersebut pake winrar.. ok... tapi..
eh ternyata udah dalam format class... gimana dong..

jadinya terpikir, bisa gak ya program java yang sudah di compile jadi class itu di lihat lagi codingnya...

setelah browsing beberapa lama akhirnya ketemu juga satu program untuk mendecompile class, namanya DJ Decompiler yang bisa di downlod di sini

setelah dicoba..
well ,, sukses abis... ketahuan semua deh codingnya,, n sekarang udah bisa login

Friday, June 12, 2009

Memodifikasi Registry Windows Dengan Menggunakan java (Windows Registry Modification With Java)

Memodifikasi Registry Windows Dengan Menggunakan java (Windows Registry Modification With Java)
Untuk Download Source Code disini mirror1 mirror2
Untuk Download binary disini mirror1 mirror2

Saya menulias artikel ini karena beberapa hari kemarin komputer saya dijahili virus dan registry windwos xp saya di acak-acak. nah dari sini saya berfikiran apakah java juga mempunyai kemampuan untuk ngacak-acak registry windows? dan teryata Java Is Powerfull. gak salah saya memilih java sebagai bahasa pemograman kesayangan. ok sekarang kita mualai aja.

Registry
Windows mempunyai pengaturan terhadap system maupun tampilan dan meyimpanya dalam registry, ketika sebuah nilai registry di ubah maka pengaturan yang berhubungan dengan registry tersebut juga ikut berubah.
misal: a. Menghiden file system
b. Mendisable TaskManager
c. Mendisable Registry Editor (bawaan Windows)
dll
nah untuk mengubah registry windows juga uda menyediakan sebuah tool yaitu "regedit" Registry Editor. karena regedit temasuk dalam pengaturan windows jika registrynya diacak-acak virus dan hasilnya kita tidak dapat menggunakannya. Untuk mengubah registry ada banyak cara selain melalui regedit, nah salah satunya menggunakan bahasa pemograman Java.
Agar Java dapat membaca dan menulis registry ke windows, anda perlu siapain library khusus yaitu "jRegistryKey", lib ini berserbasis JNI jadi menggunakan file *.dll. agar lib ini dapat berjalan mulus anda harus mengkopikan "jRegistryKey.dll" ke "c:/wondows/system32/" (untuk winNT/win200x anda kopikan ke "c:/winnt/system32/" ), kemudian setting path "jRegistryKey.jar" karena saya pake Netbeans jadi tinggal klik kanan pada project dan "add jar" trus pilih "jRegistryKey.jar" trus OK. setelah setting path tinggal
import class berikut :
ca.beq.util.win32.registry.*;
ca.beq.util.win32.registry.RootKey;

berikut cara bermain-main registry dengan Java:
1. Membuat Registry baru
untuk membuat registry baru anda cukup ketikkan perintah

try{
RegistryKey r = new RegistryKey(RootKey.HKCU, "rachmadhw.co.cc");
r.create();
}catch(RegistryException e){
JOptionPane.showMessageDialog(null,"Registry suda Ada");
}

RegistryKey(RootKey.HKCR, "rachmadhw.co.cc"); r.create(); mempunyai maksud, anda membuat registry pada pasisi/root HKCU(HKEY_CURRENT_USER) dengan nama registri "rachmadhw.co.cc".

2. Menghapus Registry

try{
RegistryKey r = new RegistryKey(RootKey.HKCU, "rachmadhw.co.cc");
r.delete();
}catch(RegistryException e){
JOptionPane.showMessageDialog(null,"Registry tidak Ada");
}

3. Mengisikan Nilai Pada Registry

try{
RegistryKey r = new RegistryKey(RootKey.HKCU, "rachmadhw.co.cc");
RegistryValue v = new RegistryValue("Komentar", ValueType.REG_SZ,"keren brow");
r.setValue(v);
}catch(RegistryException e){
JOptionPane.showMessageDialog(null, "Registry Tidak ditemukan");
}
RegistryKey(RootKey.HKCR, "rachmadhw.co.cc"); mempunyai maksud, anda memilih registry pada pasisi/root HKCU(HKEY_CURRENT_USER) dengan nama registri "rachmadhw.co.cc".

RegistryValue v = new RegistryValue("Komentar", ValueType.REG_SZ,"keren brow");
r.setValue(v);
Membuat registryKey "Komentar" dengan Nilai "Keran brow".

4. Membaca nilai registry

try{
RegistryKey r = new RegistryKey(RootKey.HKCU, "rachmadhw.co.cc");
if(r.hasValue("Komentar")) {
RegistryValue v = r.getValue("Komentar");
System.out.println(v.toString());
} // if
}catch(RegistryException e){
JOptionPane.showMessageDialog(null, "Registry Tidak ditemukan");
}

Hasilnya: Komentar:REG_SZ:keren brow

5. Untuk Mendisable TaksManager

RegistryKey r = new RegistryKey(RootKey.HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Policies");
try{
r.createSubkey("System");
}catch(RegistryException re){

}
RegistryKey r2 = new RegistryKey(RootKey.HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System");
RegistryValue v = new RegistryValue("DisableTaskMgr", ValueType.REG_DWORD, 1);
r2.setValue(v);

6. Untuk Mendisable registry

RegistryKey r = new RegistryKey(RootKey.HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Policies");
try{
r.createSubkey("System");
}catch(RegistryException re){

}
RegistryKey r2 = new RegistryKey(RootKey.HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System");
RegistryValue v = new RegistryValue("DisableRegistryTools", ValueType.REG_DWORD, 1);
r2.setValue(v);

7. Untuk Hiden file system

RegistryKey r = new RegistryKey(RootKey.HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced");
RegistryValue v = new RegistryValue("Hidden", ValueType.REG_DWORD, 0);
RegistryValue v1 = new RegistryValue("HideFileExt", ValueType.REG_DWORD, 0);
RegistryValue v2 = new RegistryValue("ShowSuperHidden", ValueType.REG_DWORD, 0);
r.setValue(v);
r.setValue(v1);
r.setValue(v2);

8.Untuk Membuat StartUp

JFileChooser fc = new JFileChooser();
fc.setDialogTitle("Pilih Aplikasi");
fc.setFileFilter(new FileFilter() {
@Override
public boolean accept(File f) {
if (f.isDirectory()) {
return true;
}
String fileName = f.getName();
int i = fileName.lastIndexOf('.');
if ((i > 0) && (i < (fileName.length() - 1))) {
String fileExt = fileName.substring(i + 1);
if ("exe".equalsIgnoreCase(fileExt)) {
return true;
}
}
return false;
}

@Override
public String getDescription() {
return "exe aja";
}
});
fc.showOpenDialog(jtemp);
jtemp.setText(fc.getCurrentDirectory().getAbsolutePath());


System.out.println("Tulis StartUp");
try{
RegistryKey r2 = new RegistryKey(RootKey.HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Run");
RegistryValue v = new RegistryValue("rachmad-hw.blogspot.com", ValueType.REG_SZ, jtemp.getText().trim());
r2.setValue(v);
}catch(RegistryException re){
System.out.println("ini kesalahan : "+ re);
}

********************************************************************************************
Untuk Download Source Code disini mirror1 mirror2
Untuk Download binary disini mirror1 mirror2

Hasil exekusi :
Memodifikasi Registry Windows Dengan Menggunakan java (Windows Registry Modification With Java)
Memodifikasi Registry Windows Dengan Menggunakan java (Windows Registry Modification With Java)
Memodifikasi Registry Windows Dengan Menggunakan java (Windows Registry Modification With Java)
Memodifikasi Registry Windows Dengan Menggunakan java (Windows Registry Modification With Java)
Memodifikasi Registry Windows Dengan Menggunakan java (Windows Registry Modification With Java)
Memodifikasi Registry Windows Dengan Menggunakan java (Windows Registry Modification With Java)
Memodifikasi Registry Windows Dengan Menggunakan java (Windows Registry Modification With Java)Memodifikasi Registry Windows Dengan Menggunakan java (Windows Registry Modification With Java)

Membuat Kalkulator Sederhana dengan menggunakan Java


Langsung aja ya!!!!

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

public class Kalkulator
extends JFrame
implements ActionListener {

// Deklarasi Variabel GUI
JTextField tampil_angka = new JTextField("0");
JPanel panalAngka = new JPanel();
JButton tombol_1 = new JButton("1");
JButton tombol_2 = new JButton("2");
JButton tombol_3 = new JButton("3");
JButton tombol_4 = new JButton("4");
JButton tombol_5 = new JButton("5");
JButton tombol_6 = new JButton("6");
JButton tombol_7 = new JButton("7");
JButton tombol_8 = new JButton("8");
JButton tombol_9 = new JButton("9");
JButton tombol_0 = new JButton("0");
JButton tombol_plusMinus = new JButton("+/-");
JButton tombol_Titik = new JButton(".");
JButton tombol_c = new JButton("C");
JButton tombol_kali = new JButton("*");
JButton tombol_kurang = new JButton("-");
JButton tombol_tambah = new JButton("+");
JButton tombol_bagi = new JButton("/");
JButton tombol_persen = new JButton("%");
JButton tombol_samaDengan = new JButton("=");
JButton tombol_ce = new JButton("CE");

// Deklarasi variabel input bukan angka
String bukan_angka = "";
// Deklarasi variabel tampung tampilan angka pertama
double bil_1 = 0;
// Deklarasi variabel angka baru jika mendapat input bukan angka
boolean angka_baru = false;

public static void main(String[] args) {
Kalkulator frame = new Kalkulator();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(310, 255);
frame.setVisible(true);
frame.setResizable(false);
} // Akhir methode main

public Kalkulator() {
// Layout dan titel
this.getContentPane().setLayout(null);
this.setTitle("Kalkulator");

// Menanmbahkan Panel

// Mengatur Panel
panalAngka.setBackground(Color.blue);
panalAngka.setBounds(new Rectangle(0, 0, 343, 225));
panalAngka.setLayout(null);

// Menambahkan Tombol-Tombol pada Panel
panalAngka.add(tombol_0, null);
panalAngka.add(tombol_1, null);
panalAngka.add(tombol_2, null);
panalAngka.add(tombol_3, null);
panalAngka.add(tombol_4, null);
panalAngka.add(tombol_5, null);
panalAngka.add(tombol_6, null);
panalAngka.add(tombol_7, null);
panalAngka.add(tombol_8, null);
panalAngka.add(tombol_9, null);
panalAngka.add(tombol_c, null);
panalAngka.add(tombol_kali, null);
panalAngka.add(tombol_kurang, null);
panalAngka.add(tombol_samaDengan, null);
panalAngka.add(tombol_tambah, null);
panalAngka.add(tombol_bagi, null);
panalAngka.add(tombol_persen, null);
panalAngka.add(tombol_ce, null);
panalAngka.add(tombol_plusMinus, null);
panalAngka.add(tombol_Titik, null);

// Menambah dan mengatur JTextField untuk menampilkan angka-angka
panalAngka.add(tampil_angka, null);
this.getContentPane().add(panalAngka, null);
tampil_angka.setBackground(Color.white);
tampil_angka.setBorder(null);
tampil_angka.setEditable(false);
tampil_angka.setText("0");
tampil_angka.setHorizontalAlignment(SwingConstants.RIGHT);
tampil_angka.setBounds(new Rectangle(7, 10, 290, 27));

/** Mengatur ukuran dan posisi Tombol-Tombol
*
* line d = 7 8 9 C CE
* line c = 4 5 6 * %
* line b = 1 2 3 - /
* line a = 0 +/- . + =
*
*/
// Untuk Line a (0, +/-, ., +, =)
tombol_0.setBounds(new Rectangle(6, 183, 50, 33));
tombol_plusMinus.setBounds(new Rectangle(66, 183, 50, 33));
tombol_Titik.setBounds(new Rectangle(126, 183, 50, 33));
tombol_tambah.setBounds(new Rectangle(186, 183, 50, 33));
tombol_samaDengan.setBounds(new Rectangle(246, 183, 50, 33));
// Untuk Line b (1, 2, 3, -, /)
tombol_1.setBounds(new Rectangle(7, 140, 50, 33));
tombol_2.setBounds(new Rectangle(66, 140, 50, 33));
tombol_3.setBounds(new Rectangle(126, 140, 50, 33));
tombol_kurang.setBounds(new Rectangle(186, 140, 50, 33));
tombol_bagi.setBounds(new Rectangle(246, 140, 50, 33));
// Untuk Line c (4, 5, 6, *, %)
tombol_4.setBounds(new Rectangle(7, 97, 50, 33));
tombol_5.setBounds(new Rectangle(66, 97, 50, 33));
tombol_6.setBounds(new Rectangle(126, 97, 50, 33));
tombol_kali.setBounds(new Rectangle(186, 97, 50, 33));
tombol_persen.setBounds(new Rectangle(246, 97, 50, 33));

// Untuk Line d (7, 8, 9, C, CE)
tombol_7.setBounds(new Rectangle(6, 54, 50, 33));
tombol_8.setBounds(new Rectangle(66, 54, 50, 33));
tombol_9.setBounds(new Rectangle(126, 54, 50, 33));
tombol_c.setBounds(new Rectangle(186, 54, 50, 33));
tombol_ce.setBounds(new Rectangle(246, 54, 50, 33));

// Menambahkan ActionListener pada Tombol-Tombol
tombol_0.addActionListener(this);
tombol_1.addActionListener(this);
tombol_2.addActionListener(this);
tombol_3.addActionListener(this);
tombol_4.addActionListener(this);
tombol_5.addActionListener(this);
tombol_6.addActionListener(this);
tombol_7.addActionListener(this);
tombol_8.addActionListener(this);
tombol_9.addActionListener(this);
tombol_plusMinus.addActionListener(this);
tombol_Titik.addActionListener(this);
tombol_c.addActionListener(this);
tombol_ce.addActionListener(this);
tombol_kali.addActionListener(this);
tombol_kurang.addActionListener(this);
tombol_persen.addActionListener(this);
tombol_bagi.addActionListener(this);
tombol_samaDengan.addActionListener(this);
tombol_tambah.addActionListener(this);
} // Akhir methode Kalkulator

/**
* Methode actionPerformed(ActionEvent e)
* Methode untuk memproses event yang diterima dari Tombol
* @param e :
*/
public void actionPerformed(ActionEvent e) {
// Mengambil nama Command dari setiap tombol
String a = e.getActionCommand();

// Jika tombol operator yang ditekan
if ( (a == "=") || (a == "-") || (a == "+") || (a == "*") || (a == "/")) {
// Panggil methode operasi dengan input a
operasi(a);
}

// Tetapi jika tombol titik yang ditekan
else if (a == ".") {
// Panggil Methode koma dengan input a
koma(a);
}

// Tetapi jika tombol persen atau “+/-“ yang ditekan
else if (a == "%" || a == "+/-") {
// Panggil methode persen_negatif dengan input a
persen_negatif(a);
}

// Tetapi jika tombol C atau CE yang ditekan
else if (a == "C" || a == "CE") {
// Panggil methode hapus dengan input a
hapus(a);
}

// Tetapi jika tombol angka yang ditekan
else {
// Panggil methode angka dengan input a
angka(a);
}
} // Akhir methode kalkulator

/**
* Methode : angka
* Keterangan : proses jika input yang didapat adalah Angka
* @param a :
*/
public void angka(String a) {
// Jika angka ditekan setelah tombol operator
if (angka_baru) {
tampil_angka.setText(a);
angka_baru = false;
}
else {
// Jika tombol angka pertama kali ditekan
if (tampil_angka.getText().equals("0")) {
// Hilangkan "0" dan diisi dengan angka yang ditekan
tampil_angka.setText(a);
}
// Tetapi jika bukan yang pertama kali ditekan
else {
// Tambahkan String angka tersebut
a = tampil_angka.getText() + a;
// Isi dengan string yang telah didapat
tampil_angka.setText(a);
}
}
} // Akhir methode angka

/**
* Methode : operasi
* Keterangan : proses jika input yang didapat adalah
* "+" "-" "*" "/" atau "="
* @param a :
*/
public void operasi(String a) {
// Mengambil nilai yang ada pada teks field
String ambil_angka = tampil_angka.getText();
// Jika tombol yang ditekan bukan tombol operator
if (angka_baru && bukan_angka != "=") {
}
// Tetapi jika tombol yang ditekan adalah tombol operator
else {
// Angka yang ditekan akan menjadi angka baru berikutnya
angka_baru = true;
// Jika Penjumlahan
if (bukan_angka == "+") {
bil_1 += Double.parseDouble(ambil_angka);
bukan_angka = a;
}
// Tetapi jika perkalian
else if (bukan_angka == "*") {
bil_1 *= Double.parseDouble(ambil_angka);
bukan_angka = a;
}
// Tetapi jika Pembagian
else if (bukan_angka == "/") {
bil_1 /= Double.parseDouble(ambil_angka);
bukan_angka = a;
}
// Tetapi jika pengurangan
else if (bukan_angka == "-") {
bil_1 -= Double.parseDouble(ambil_angka);
bukan_angka = a;
}
// Tetapi jika tombol "="
else {
bil_1 = Double.parseDouble(ambil_angka);
bukan_angka = a;
}
}
// Merubah hasil dari Double menjadi String
String koma_nol = Double.toString(bil_1);
// Apabila hasil yang didapatkan bilangan bulat
if (koma_nol.endsWith(".0")) {
// Hilangkan dua digit paling akhir (.0)
koma_nol = koma_nol.substring(0, koma_nol.trim().length() - 2);
}
// Tampilkan hasil akhir
tampil_angka.setText(koma_nol);
} // Akhir methode operasi

/**
* Methode : koma
* Keterangan : proses jika input yang didapat adalah
* "."
* @param a :
*/
public void koma(String a) {
String titik = tampil_angka.getText();
if (angka_baru) {
tampil_angka.setText("0.");
angka_baru = false;
}
else {
if (titik.indexOf(".") == -1) {
titik = titik + ".";
}
}
tampil_angka.setText(titik);
} // Akhir methode koma

/**
* Methode : persen_negatif
* Keterangan : proses jika input yang didapat adalah
* "%" atau "+/-"
* @param a :
*/
public void persen_negatif(String a) {
// Jika tombol "%" yang ditekan
if (a == "%") {
bil_1 = (Double.parseDouble(tampil_angka.getText())) / 100;
}
// Jika tombol "+/-" yang ditekan
else {
bil_1 = (Double.parseDouble(tampil_angka.getText())) * -1;
}

// Merubah hasil dari Double menjadi String
String koma_nol = Double.toString(bil_1);
// Apabila hasil yang didapatkan bilangan bulat
if (koma_nol.endsWith(".0")) {
// Hilangkan dua digit paling akhir (.0)
koma_nol = koma_nol.substring(0, koma_nol.trim().length() - 2);
}
// Tampilkan hasil akhir
tampil_angka.setText(koma_nol);
} // Akhir methode persen_negatif

/**
* Methode : hapus
* Keterangan : proses jika input yang didapat adalah
* "C" atau "CE"
* @param a :
*/
public void hapus(String a) {
if (a == "C") {
tampil_angka.setText("0");
bukan_angka = "";
bil_1 = 0;
angka_baru = true;
}
else {
tampil_angka.setText("0");
angka_baru = true;
}
} // Akhir methode hapus

} // Akhir Class Kalkulator

Membuat SMS Gateway Dengan Java dan Mysql (Making SMS GATEWAY with Java and Mysql) part1

source code bisa didownload disini mirror1

SMS (Short Messaging Services) Data SMS (Short Messaging Services) yang kita kirim atau yang kita terima sebenarnya memiliki format tersendiri untuk dapat diterjemahkan oleh sebuah mobile phone. Format atau mode yang dipakai untuk mengirim dan menerima SMS sebenarnya ada dua yaitu mode text dan mode PDU (Protocol Data Unit). Akan tetapi, sistem mode text tidak didukung oleh semua operator GSM maupun terminal.

1. Text Mode Mode ini adalah cara termudah untuk mengirim pesan. Pada mode teks pesan yang kita kirim tidak dilakukan konversi. Teks yang dikirim tetap dalam bentuk aslinya dengan panjang mencapai 160 (7 bit default alphabet) atau 140 (8 bit) karakter. Sesungguhnya, mode teks adalah hasil encode yang direpresentasikan dalam format PDU. Kelemahannya, kita tidak dapat menyisipkan gambar dan nada dering ke dalam pesan yang akan dikirim serta terbatasnya tipe encoding.

2. PDU (Protocol Data Unit) Mode PDU mode adalah format message dalam heksadesimal octet dan semi-desimal octet dengan panjang mencapai 160 (7 bit default alphabet) atau 140 (8 bit) karakter. Kelebihan menggunakan mode PDU adalah kita dapat melakukan encoding sendiri yang tentunya harus pula didukung oleh hardware dan operator GSM, melakukan kompresi data, menambahkan nada dering dan gambar pada pesan yang dikirim. Beberapa tipe encoding yang umum digunakan adalah “PCCP437”, “PCDN”, “8859-1”, “IRA” dan “GSM”. Kita juga dapat menambahkan header ke dalam pesan yang akan dikirim, seperti timestamp, nomor SMSC dan meta-informasi lainnya. 2.1.1 Sistem Kerja SMS Pada saat kita mengirim pesan SMS dari handphone (mobile originated) pesan tersebut tidak langsung dikirim ke handphone tujuan (mobile terminated), akan tetapi dikirim terlebih dahulu ke SMS Center (SMSC), baru kemudian pesan tersebut diteruskan ke handphone tujuan.


Gambar 1
Dengan adanya SMSC ini dapat mengetahui status dari pesan SMS yang telah dikirim, apakah telah sampai atau gagal diterima oleh handphone tujuan. Apabila handphone tujuan dalam keadaan aktif dan dapat menerima pesan SMS yang dikirim, ia akan mengirim kembali pesan konfirmasi ke SMSC yang menyatakan bahwa pesan telah diterima. Kemudian SMSC mengirimkannya kembali status tersebut kepada si pengirim. Jika handphone dalam keadaan mati, pesan yang dikirimkan akan disimpan pada SMSC sampai period-validity terpenuhi. 2.1.2 Koneksi ke SMSC Untuk dapat mengirim dan menerima pesan, kita harus melakukan koneksi ke SMSC. Ada beberapa cara untuk melakukan koneksi ke SMSC antara lain : · Menggunakan terminal baik berupa GSM modem atau handphone. Cara ini adalah yang paling mudah tetapi memiliki kekurangan antara lain jumlah pesan yang dikirim per menit sangat terbatas (sekitar 6-10 pesan per menit). Untuk mengantisipasi hal ini biasanya digunakan lebih dari satu terminal.

· Koneksi langsung ke SMSC Dengan melakukan koneksi langsung ke SMSC kita dapat mengirim pesan dalam jumlah banyak, dapat mencapai sekitar 600 SMS per menit bergantung pada kapasitas dari SMSC itu sendiri. Untuk melakukan koneksi ke SMSC diperlukan protocol penghubung. Protocol yang umum digunakan adalah UCP, SMPP, CIMD2, OIS dan TAP. Masing–masing operator GSM menyediakan tipe protocol yang berbeda-beda.

· Menggunakan software Bantu Saat ini banyak vendor telekomunikasi menawarkan software bantu untuk melakukan koneksi ke SMSC, dari yang bersifat freeware, open source sampai dengan yang komersial. Pemilihan koneksi ke SMSC biasanya disesuaikan dengan jumlah pesan SMS yang akan dikirim. Gambar dibawah ini menunjukkan skema tipe koneksi ke SMSC.


2.1.3 Mode Pengiriman dan Penerimaan SMS dengan PDU

Data yang mengalir ke atau dari SMS-Center harus berbentuk PDU (Protokol Data Unit). PDU berisi bilangan-bilangan heksadesimal yang mencerminkan bahasa I/O. PDU berisi atas beberapa header. Header untuk kirim SMS ke SMS-Center berbeda dengan SMS yang diterima dari SMS-Center.

A. PDU untuk kirim SMS ke SMS-Center Terdapat delapan header untuk mengirim SMS, yaitu : 1. Nomor SMS-Center Header pertama ini terbagi atas tiga subheader, yaitu :
a. Jumlah pasangan Heksadesimal SMSC dalam bilangan heksa
b. National/International code
* untuk National, kode subheader-nya yaitu 81
* untuk International, kode subheader-nya yaitu 91
c. No SMS-Center-nya sendiri, dalam pasangan heksa dibalik-balik. Jika tertinggal satu angka heksa yang tidak memiliki pasangan, angka tersebut akan dipasangkan dengan huruf F didepannya. Contoh : untuk nomor SMSC Excelcom 62818445009 dapat diubah menjadi
a. 07 --> ada 7 pasang
b. 91 --> 1 pasang
c. 26-18-48-54-00-F9 --> 6 pasang
Digabung menjadi : 07912618485400F9
1. Telkomsel 62811000000 07912618010000F0
2. Satelindo 62816125 059126181652
3. Exelcom 62818445009 07912618485400F9
4. Indosat-M3 62855000000 07912658050000F0


2. Tipe SMS
Untuk SEND tipe SMS = 1. Jadi bilangan heksanya adalah 01.
3. Nomor Referensi SMS
Nomor referensi ini dibiarkan dulu 0, jadi bilangan heksanya adalah 00. Nanti akan diberikan nomor referensi otomatis oleh ponsel atau alat SMS gateway.
4. Nomor Ponsel Penerima

a. Jumlah bilangan desimal nomor ponsel yang dituju dalam bilangan heksa.
b. National/International code * untuk National, kode subheader-nya yaitu 81 * untuk International, kode subheader-nya yaitu 91

c. Nomor ponsel yang dituju, dalam pasangan Heksa dibalik-balik. Sama dengan cara penulisan subheader SMSC.

Contoh : untuk nomor ponsel yang dituju = 628129573337 dapat diubah menjadi
a. 0C à ada 12 angka
b. 91 c. 26-18-92-75-33-73 Digabung menjadi 0C91 261892753373

5. Bentuk SMS, antara lain : 0 à 00 à dikirim sebagai SMS
1 --> 01 --> dikirim sebagai telex
2 -->02 --> dikirim sebagai fax 6. Skema Encoding Data I/O Ada dua skema, yaitu :

a. Skema 7 bit à ditandai dengan angka 0 -->00
b. Skema 8 bit à ditandai dengan angka lebih besar dari 0 à diubah ke heksa Kebanyakan ponsel atau SMS gateway yang ada di pasaran sekarang menggunakan skema 7 bit.


7. Jangka Waktu Sebelum SMS Expired
Agar SMS kita pasti terkirim sampai ke ponsel penerima, sebaiknya kita tidak memberikan batasan waktu validnya.

8. Isi SMS
Header ini terdiri atas dua subheader, yaitu :

a. Panjang isi (jumlah huruf dari isi)
Misalnya : untuk kata “hello” --> ada 5 huruf --> 05
b. Isi berupa pasangan bilangan heksa

· Untuk ponsel/SMS gateway berskema encoding 7 bit, jika kita mengetikkan suatu huruf dari keypad-nya, berarti kita telah membuat 7 angka 1/0 berurutan.

Ada dua langkah yang harus dilakukan untuk mengkonversi isi SMS, yaitu :
1. mengubah menjadi kode 7 bit, contoh kata “hello”

bit 7 1
h -->110 1000
e -->110 0101
l --> 110 1100
l --> 110 1100
o --> 110 1111

mengubah kode 7 bit menjadi 8 bit, yang diwakili oleh pasangan heksa. E 8

h 1 110 1000 3 2
e 00 11 0010 9 B
l 100 1 1011 F D
l 1111 1101 0 6
o 0000 0 110

Dengan demikian kata “hello” hasil konversinya E8329BFD06
Menggabungkan kedelapan header untuk mengirim kata “hello” ke ponsel nomor 628129573337 lewat SMS-Center Excelcom, tanpa membatasi jangka waktu valid, maka PDU lengkapnya adalah : 07912618485400F901000C9126189275337300000E8329BFD06



Bersambung.............................


Technorati Profile

Wednesday, June 3, 2009

Create Image-Themed Components with Java

This hack shows how to use Swing's built-in image support to create a completely custom image-based user interface.

Most Swing applications get their look from a Look and Feel (L&F)either a standard one provided by the VM or a custom one. L&Fs are a whole lot of work to build and still aren't completely custom. You can redefine a button to look like red stoplights, but then all buttons throughout your application will look like red stoplights. Sometimes all you really want is a look built entirely out of images, much like image-based web navigation.

To give you an idea of where this hack is going, Figure 1-1 shows our target: a frame with a panel containing a label, a button, and a checkbox. The panel, label, and button will be completely drawn with images, using none of the standard L&F. The checkbox will be a standard checkbox, but it should be transparent to fit in with the image background.
A component rendered with images by_bosojavaA component rendered with images


The first step toward image nirvana is the background. Because this type of component is quite reusable, I built a subclass of JPanel called ImagePanel, shown in A Custom subclass of JPanel

public class ImagePanel extends JPanel {
private Image img;

public ImagePanel(Image img) {
this.img = img;
Dimension size = new Dimension(img.getWidth(null),
img.getHeight(null));
setSize(size);
setPreferredSize(size);
setMinimumSize(size);
setMaximumSize(size);
setLayout(null);
}

}


The constructor takes the image to draw and saves it for later use in the img variable. Then it calls setSize( ) and setPreferredSize() with the size of the image. This ensures that the panel will be the size of the image exactly. I had to set the preferred, maximum, and minimum sizes as wellthis is because the panel's parent and children may not be using absolute layouts.



Absolute layout means that there is no layout manager to position the components appropriately (which can be set by calling setLayout(null)).

In this case, the explicit size and position will be used (via setSize( ) and setLocation( )). When a layout manager is set, the preferred, minimum, and maximum sizes may be used. To cover all of the bases, simply set all four values to the image size.

Now that the panel is sized appropriately, you can paint the image by overriding paintComponent():

public void paintComponent(Graphics g) {
g.drawImage(img,0,0,null);
}




It's important to override paintComponent( ) instead of paint( ), or else the child components won't get drawn.

To test it, uses an ImagePanel and the usual JFrame.
Testing out image-based panels

public class ImageTest {

public static void main(String[] args) {
ImagePanel panel = new ImagePanel(new
ImageIcon("images/background.png").getImage());

JFrame frame = new JFrame("Hack #1: Create Image-Themed Components");
frame.getContentPane().add(panel);
frame.pack();
frame.setVisible(true);

}
}


When run, the ImageTest program looks like Figure 1-2.

Now that the background is done, it's time to focus on the label, Activate Reactor. This is just a static image that sits at a certain position on the background. You could use another ImagePanel, but since the Activate Reactor text is logically a JLabel, you can just create an ImageLabel subclass, as shown in
Background only by_bosojavaBackground only


An image-based label

public class ImageLabel extends JLabel {

public ImageLabel(ImageIcon icon) {
setSize(icon.getImage().getWidth(null),
icon.getImage().getHeight(null));
setIcon(icon);
setIconTextGap(0);
setBorder(null);
setText(null);
setOpaque(false);
}

}


As with the ImagePanel, set the size of the label to match the size of the image. The rest of the sizing isn't needed because the JLabel will take care of that itself. Next, set the icon to your image, which lets the JLabel take care of the image drawing. Setting the icon text gap to zero and the border and text to null will remove any extra space around my image, resulting in a perfect mesh with the background. The final setOpaque(false) tells the label not to draw its own background. If your image fills the label then this won't matter, but if the image has transparent areas (as PNG files often do), then this will let the background shine through the transparent parts.

Add this code to ImageTest's main() method:

ImageLabel label = new ImageLabel(new ImageIcon("images/reactor.png"));
label.setLocation(29,37);
panel.add(label);


The result is shown in Figure
A custom JLabel by_bosojava
A custom JLabel


Next comes the button. Because buttons have rollovers and states, they are a bit trickier. Again, start with a JButton subclass, as in
Creating an image-based button by_bosojava
Creating an image-based button

public class ImageButton extends JButton {
public ImageButton(ImageIcon icon) {
setSize(icon.getImage().getWidth(null),
icon.getImage().getHeight(null));
setIcon(icon);
setMargin(new Insets(0,0,0,0));
setIconTextGap(0);
setBorderPainted(false);
setBorder(null);
setText(null);

}
}


The code is almost the same as JLabel. The only difference is the addition of the setMargin() and setBorder() calls. Most Look and Feels use a border and margin to indicate when the button has been selected. Labels aren't selectable so they don't have those methods. In any case, these are two more properties you can simply turn off.

Add this code to ImageTest's main() method:

final ImageButton button = new ImageButton("images/button.png");
button.setLocation(60,74);
panel.add(button);


The result is shown in Figure 1-4.

Image button


Now that the button is visible, you only have to add the rollovers and other states. Fortunately, this doesn't require any new coding in the subclassJButton already provides support for images representing the rollover, pressed, selected, disabled, and disabled selected states. You can add various states by using normal set methods:

button.setPressedIcon(new ImageIcon("images/button-down.png"));
button.setRolloverIcon(new ImageIcon("images/button-over.png"));
button.setSelectedIcon(new ImageIcon("images/button-sel.png"));
button.setRolloverSelectedIcon(new ImageIcon("images/button-sel-over.png"));
button.setDisabledIcon(new ImageIcon("images/button-disabled.png"));
button.setDisabledSelectedIcon(
new ImageIcon("images/button-disabled-selected.png"));


the images I used to represent each state. The rollover effect is done with an outer glow, and I used a blur for the disabled state. The red rectangle in the middle represents the selected state, and it includes its own color change and red glow mimicking a real glowing lightbulb.
Unselected button with rollover & Selected button by_bosojava
Unselected button with rollover & Selected button


On Image Creation

I created these images by drawing everything in a separate layer in Photoshop. Keeping it all separate means I could save any section of the image as it's own file, with or without effects and backgrounds. Photoshop has a great feature called slices that lets you divide the image up into malleable sections. Photoshop's companion program, ImageReady, takes slices a step further by managing slice states for you. This lets you create rollovers, in and out images, and disabled states. When you Save Optimized, ImageReady automatically saves each slice state to a different file with the appropriate name (e.g., buttondisabled-selected.png). Slices were originally created for web design, but they can be put to great use in Swing applications as well.

To fully demonstrate all of the states, I have added a standard JCheckBox. Normally, it would draw a gray background (or striped on the Mac) but a simple setOpaque(false) fixes that. The call to checkbox.setSize(checkbox. getPreferredSize( )) is needed to make the checkbox size itself properly when there is no layout manager in the parent, which is the case for this panel:

final JCheckBox checkbox = new JCheckBox("Disable");
checkbox.setLocation(70,150);
checkbox.setOpaque(false);
checkbox.setSize(checkbox.getPreferredSize());
panel.add(checkbox);
checkbox.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
button.setEnabled(!checkbox.isSelected());
}
});


With the addition of this code to ImageTest's main() method, the imagebased showcase program is complete. shows what the running program looks like in the selected but disabled state.
Selected and disabled by_bosojava
Selected and disabled

Wednesday, May 27, 2009

Membuat Piramida Bilangan dengan Java

public class PiramidaBilangan
{
/**Main method*/
public static void main(String[] args)
{
int jumBaris;
String data="";

System.out.println("\nPROGRAM MENCETAK PIRAMIDA BILANGAN");
System.out.println("----------------------------------\n");

// Menginstruksikan user untuk memasukkan jumlah baris
System.out.print("Hasil : \n");
data = javax.swing.JOptionPane.showInputDialog(null,"Masukan Jumlah baris:","5");
jumBaris = Integer.parseInt(data);

for (int baris = 1; baris < (jumBaris + 1); baris++) { // Mencetak spasi di urutan depan hingga posisi tengah // untuk memanipulasi tampilan for (int kolom = 1; kolom < (jumBaris + 1) - baris; kolom++) System.out.print(" "); // Mencetak bilangan di urutan depan hingga posisi tengah for (int bilangan = baris; bilangan >= 1; bilangan--)
System.out.print(bilangan);

// Mencetak bilangan dari posisi tengah hingga belakang
for (int bilangan = 2; bilangan <= baris; bilangan++) System.out.print(bilangan); // Memulai baris baru System.out.println(); } } } ////**********************************untuk piramida terbalik*************************** public class PiramidaBilangan { /**Main method*/ public static void main(String[] args) { int jumBaris; String data=""; System.out.println("\nPROGRAM MENCETAK PIRAMIDA BILANGAN"); System.out.println("----------------------------------\n"); // Menginstruksikan user untuk memasukkan jumlah baris System.out.print("Hasil : \n"); data = javax.swing.JOptionPane.showInputDialog(null,"Masukan Jumlah baris:","5"); jumBaris = Integer.parseInt(data); for (int baris = 1; baris < (jumBaris + 1); baris++) { // Mencetak spasi di urutan depan hingga posisi tengah // untuk memanipulasi tampilan for (int kolom = 1; kolom < bilangan =" (jumBaris">= 1; bilangan--)
System.out.print(bilangan);

// Mencetak bilangan dari posisi tengah hingga belakang
for (int bilangan = 2; bilangan <= (jumBaris + 1)-baris; bilangan++) System.out.print(bilangan); // Memulai baris baru System.out.println(); } } } source code download disini

hasil: