Senin, 22 Maret 2010

KeyPreview di JPanel

Kita dapat membuat Propertiy KeyPreview di JPanel pada java seperti pada Visual Basic .NET atau pada Delphi (kalo tidak salah), property ini mempunyai type data boolean biasanya, dan jika bernilai true, maka KeyListener pada object swing selain JPanel akan dialihkan ke object JPanel walaupun JPanel tidak sedang mendapat focus pada saat event KeyListener dijalankan, disini sebagai contoh kita akan membuat interface tRedispatchKeyEvent  :

import javax.swing.JComponent;

/**
* @author Ahmad Thahir
* @since JDK 1.6
*
*/
public interface tRedispatchEvent {

public void redispatchKeyEventTo (JComponent targetComponent);

public void cancelRedispactKeyEventTo (JComponent targetComponent);

}

kemudian kita buat class tJTextField turunan dari JTextField yang mengimplementasikan interface diatas

import java.awt.KeyboardFocusManager;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JComponent;
import javax.swing.JTextField;
import javax.swing.text.AbstractDocument;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.DocumentFilter;

public class tJTextField extends JTextField implements tRedispatchEvent {

private KeyListener redispatchKeyListener;

public void redispatchKeyEventTo(final JComponent targetComponent) {
redispatchKeyListener=new KeyListener() {

public void keyTyped(KeyEvent e) {
KeyboardFocusManager.getCurrentKeyboardFocusManager().redispatchEvent(targetComponent, e);
}

public void keyPressed(KeyEvent e) {
keyTyped(e);
}

public void keyReleased(KeyEvent e) {
keyTyped(e);
}
};
addKeyListener(redispatchKeyListener);
}

public void cancelRedispactKeyEventTo(JComponent Component) {
removeKeyListener(redispatchKeyListener);
}

}

nah sekarang tinggal buat tJPanel nya yang memiliki property KeyPreview

import java.awt.Component;
import javax.swing.JPanel;

public class tJPanel extends JPanel {

private Boolean KeyPreview=false;

public Boolean getKeyPreview() {
return KeyPreview;
}

public void setKeyPreview(Boolean KeyPreview) {
Boolean oldValue = getKeyPreview();

if (oldValue==KeyPreview) return;

int comCount=getComponentCount();

for (int i=0;i

nah silahkan dicoba menggunakan tJPanel diatas dengan memasukkan tJTextfield dan setKeyPreview-nye menjadi true, dan jangan lupa menambahkan KeyListener pada tJPanel yang telah dibuat, gimana KeyListener pada tJTextfield ?, tidak perlu lagi karena pada saat tJTextField mendapatkan focus dan tombol ditekan, maka otomatis akan langsung di alihkan ke KeyListener nya tJPanel, ok, kalau sudah dicoba, jangan lupa komen nya ya :)

2 komentar:

  1. maksudnya key listener tu gmn gan..?? masih belum mudeng nih....

    BalasHapus
  2. maksudnya key listener tu gmn gan..?? masih belum mudeng nih....

    BalasHapus