Kita sering pengen yang aneh-aneh dengan swing yang kita pake terutama form.
bikin form transparan di java mungkin ga' ya? nah ni salah satu pertanyaan yang muncul dari
kepala saya. akhirnya saya pun mulai coba-coba diselah kepenatan pekerjaan di kantor baru.
langsung aja saya akan bahas hasil coba-coba saya.
Pada dasarnya untuk membuat form transparan kita hanya perlu meng-capture screen trus hasilnya tinggal kita jadikan background di from kita dan tentunya harus disesuaikan dengan posisi form di screen.
untuk meng-capture screen kita buat fungsi berikut:
public void updateBackground( ) {
try {
Robot rbt = new Robot( );
Toolkit tk = Toolkit.getDefaultToolkit( );
Dimension dim = tk.getScreenSize( );
background = rbt.createScreenCapture(
new Rectangle(0,0,(int)dim.getWidth( ),
(int)dim.getHeight( )));
} catch (Exception ex) {
System.out.println(ex.toString( ));
ex.printStackTrace( );
}
}
kemudian menjadikan hasil capture sebagai background.
@Override
public void paintComponent(Graphics g) {
Point pos = this.getLocationOnScreen( );
Point offset = new Point(-pos.x,-pos.y);
g.drawImage(background,offset.x,offset.y,null);
}
agar background berubah sesuai screen saat form kita harus tambahkan actionListener.
dan berikan perintah untuk mengubah background saat kita drag, seperti berikut perintahnya.
public void componentResized(ComponentEvent e) {
repaint( );
}
public void componentMoved(ComponentEvent e) {
repaint( );
}
public void componentShown(ComponentEvent e) {
repaint( );
}
public void componentHidden(ComponentEvent e) {
}
public void windowGainedFocus(WindowEvent e) {
refresh( );
}
public void windowLostFocus(WindowEvent e) {
refresh( );
}
public void run() {
try {
while(true) {
Thread.sleep(250);
long now = new Date( ).getTime( );
if(refreshRequested &&
((now - lastupdate) > 1000)) {
if(frame.isVisible( )) {
Point location = frame.getLocation( );
updateBackground( );
frame.setLocation(location);
refresh( );
}
lastupdate = now;
refreshRequested = false;
}
}
} catch (Exception ex) {
System.out.println(ex.toString( ));
ex.printStackTrace( );
}
}
public void refresh( ) {
if(frame.isVisible( )) {
repaint( );
refreshRequested = true;
lastupdate = new Date( ).getTime( );
}
}
berikut source lengkapnya:
/**
* TRASPARAN FORM
* JDKSE :
* Editor : Netbeans 6.5
* OLEH RACHMAD HW email: rac3_hw@yahoo.com blog: rachmad-hw.blogspot.com
*/
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowFocusListener;
import java.util.Date;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
/**
*
* @author RACHMAD HW
*/
public class tbForm extends JComponent implements ComponentListener, WindowFocusListener,
Runnable {
private JFrame frame;
private Image background;
private long lastupdate = 0;
public boolean refreshRequested = true;
public tbForm(JFrame frame) {
this.frame = frame;
updateBackground( );
frame.addComponentListener(this);
frame.addWindowFocusListener(this);
new Thread(this).start( );
}
public void updateBackground( ) {
try {
Robot rbt = new Robot( );
Toolkit tk = Toolkit.getDefaultToolkit( );
Dimension dim = tk.getScreenSize( );
background = rbt.createScreenCapture(
new Rectangle(0,0,(int)dim.getWidth( ),
(int)dim.getHeight( )));
} catch (Exception ex) {
System.out.println(ex.toString( ));
ex.printStackTrace( );
}
}
@Override
public void paintComponent(Graphics g) {
Point pos = this.getLocationOnScreen( );
Point offset = new Point(-pos.x,-pos.y);
g.drawImage(background,offset.x,offset.y,null);
}
public static void main(String[] args) {
JFrame frame = new JFrame("Transparan Form...... ^_^");
tbForm bg = new tbForm(frame);
bg.setLayout(new BorderLayout( ));
JButton button = new JButton("ini button");
bg.add("North",button);
JLabel label = new JLabel("ini label");
bg.add("South",label);
frame.getContentPane( ).add("Center",bg);
frame.pack( );
frame.setSize(300,300);
frame.show( );
}
public void componentResized(ComponentEvent e) {
repaint( );
}
public void componentMoved(ComponentEvent e) {
repaint( );
}
public void componentShown(ComponentEvent e) {
repaint( );
}
public void componentHidden(ComponentEvent e) {
}
public void windowGainedFocus(WindowEvent e) {
refresh( );
}
public void windowLostFocus(WindowEvent e) {
refresh( );
}
public void run() {
try {
while(true) {
Thread.sleep(10);
long now = new Date( ).getTime( );
if(refreshRequested &&
((now - lastupdate) > 10)) {
if(frame.isVisible( )) {
Point location = frame.getLocation( );
updateBackground( );
frame.setLocation(location);
refresh( );
}
lastupdate = now;
refreshRequested = false;
}
}
} catch (Exception ex) {
System.out.println(ex.toString( ));
ex.printStackTrace( );
}
}
public void refresh( ) {
if(frame.isVisible( )) {
repaint( );
refreshRequested = true;
lastupdate = new Date( ).getTime( );
}
}
}
/*
* ------------------------------------------------------------
*/
Nah gimana hasilnya?


bikin form transparan di java mungkin ga' ya? jawabnya --> YA MUNGKIN LAH!!!
bikin form transparan di java mungkin ga' ya? nah ni salah satu pertanyaan yang muncul dari
kepala saya. akhirnya saya pun mulai coba-coba diselah kepenatan pekerjaan di kantor baru.
langsung aja saya akan bahas hasil coba-coba saya.
Pada dasarnya untuk membuat form transparan kita hanya perlu meng-capture screen trus hasilnya tinggal kita jadikan background di from kita dan tentunya harus disesuaikan dengan posisi form di screen.
untuk meng-capture screen kita buat fungsi berikut:
public void updateBackground( ) {
try {
Robot rbt = new Robot( );
Toolkit tk = Toolkit.getDefaultToolkit( );
Dimension dim = tk.getScreenSize( );
background = rbt.createScreenCapture(
new Rectangle(0,0,(int)dim.getWidth( ),
(int)dim.getHeight( )));
} catch (Exception ex) {
System.out.println(ex.toString( ));
ex.printStackTrace( );
}
}
kemudian menjadikan hasil capture sebagai background.
@Override
public void paintComponent(Graphics g) {
Point pos = this.getLocationOnScreen( );
Point offset = new Point(-pos.x,-pos.y);
g.drawImage(background,offset.x,offset.y,null);
}
agar background berubah sesuai screen saat form kita harus tambahkan actionListener.
dan berikan perintah untuk mengubah background saat kita drag, seperti berikut perintahnya.
public void componentResized(ComponentEvent e) {
repaint( );
}
public void componentMoved(ComponentEvent e) {
repaint( );
}
public void componentShown(ComponentEvent e) {
repaint( );
}
public void componentHidden(ComponentEvent e) {
}
public void windowGainedFocus(WindowEvent e) {
refresh( );
}
public void windowLostFocus(WindowEvent e) {
refresh( );
}
public void run() {
try {
while(true) {
Thread.sleep(250);
long now = new Date( ).getTime( );
if(refreshRequested &&
((now - lastupdate) > 1000)) {
if(frame.isVisible( )) {
Point location = frame.getLocation( );
updateBackground( );
frame.setLocation(location);
refresh( );
}
lastupdate = now;
refreshRequested = false;
}
}
} catch (Exception ex) {
System.out.println(ex.toString( ));
ex.printStackTrace( );
}
}
public void refresh( ) {
if(frame.isVisible( )) {
repaint( );
refreshRequested = true;
lastupdate = new Date( ).getTime( );
}
}
berikut source lengkapnya:
/**
* TRASPARAN FORM
* JDKSE :
* Editor : Netbeans 6.5
* OLEH RACHMAD HW email: rac3_hw@yahoo.com blog: rachmad-hw.blogspot.com
*/
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowFocusListener;
import java.util.Date;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
/**
*
* @author RACHMAD HW
*/
public class tbForm extends JComponent implements ComponentListener, WindowFocusListener,
Runnable {
private JFrame frame;
private Image background;
private long lastupdate = 0;
public boolean refreshRequested = true;
public tbForm(JFrame frame) {
this.frame = frame;
updateBackground( );
frame.addComponentListener(this);
frame.addWindowFocusListener(this);
new Thread(this).start( );
}
public void updateBackground( ) {
try {
Robot rbt = new Robot( );
Toolkit tk = Toolkit.getDefaultToolkit( );
Dimension dim = tk.getScreenSize( );
background = rbt.createScreenCapture(
new Rectangle(0,0,(int)dim.getWidth( ),
(int)dim.getHeight( )));
} catch (Exception ex) {
System.out.println(ex.toString( ));
ex.printStackTrace( );
}
}
@Override
public void paintComponent(Graphics g) {
Point pos = this.getLocationOnScreen( );
Point offset = new Point(-pos.x,-pos.y);
g.drawImage(background,offset.x,offset.y,null);
}
public static void main(String[] args) {
JFrame frame = new JFrame("Transparan Form...... ^_^");
tbForm bg = new tbForm(frame);
bg.setLayout(new BorderLayout( ));
JButton button = new JButton("ini button");
bg.add("North",button);
JLabel label = new JLabel("ini label");
bg.add("South",label);
frame.getContentPane( ).add("Center",bg);
frame.pack( );
frame.setSize(300,300);
frame.show( );
}
public void componentResized(ComponentEvent e) {
repaint( );
}
public void componentMoved(ComponentEvent e) {
repaint( );
}
public void componentShown(ComponentEvent e) {
repaint( );
}
public void componentHidden(ComponentEvent e) {
}
public void windowGainedFocus(WindowEvent e) {
refresh( );
}
public void windowLostFocus(WindowEvent e) {
refresh( );
}
public void run() {
try {
while(true) {
Thread.sleep(10);
long now = new Date( ).getTime( );
if(refreshRequested &&
((now - lastupdate) > 10)) {
if(frame.isVisible( )) {
Point location = frame.getLocation( );
updateBackground( );
frame.setLocation(location);
refresh( );
}
lastupdate = now;
refreshRequested = false;
}
}
} catch (Exception ex) {
System.out.println(ex.toString( ));
ex.printStackTrace( );
}
}
public void refresh( ) {
if(frame.isVisible( )) {
repaint( );
refreshRequested = true;
lastupdate = new Date( ).getTime( );
}
}
}
/*
* ------------------------------------------------------------
*/
Nah gimana hasilnya?


bikin form transparan di java mungkin ga' ya? jawabnya --> YA MUNGKIN LAH!!!
kepanjangan ni codding
ReplyDelete