Tags

, , , , , , , , , ,

Wah wah ga kerasa tanggal 25 Februari kemaren ternyata blog saya sudah berumur satu tahun. hahaha.

Masih banyak malesnya sih update blog, mungkin karena kesibukan dan lain2. Ngeles. hahaha. Kesempatan kali ini saya mau bahas mengenai JPopup menu. Apa itu JPopupMenu dan apa fungsinya, mungkin tak perlu saya bahas sekarang karena nantinya anda akan memiliki pengertian dan fungsi menurut anda sendiri setelah anda membaca tutorial saya. 😛

Sebetulnya membuat popup menu untuk melakukan Copy, Cut, Paste ataupun Delete di java tidaklah sulit. Kesemua fasilitas itu telah tersedia di Java AWT. Kita hanya tinggal memasukkan komponen textfield atau text area ke dalam form, maka secara default textfield atau text area tersebut akan memiliki popup menu Cut, Copy, Paste, dan Delete.
Tapi permasalahannya adalah kita tidak bisa menemukan hal seperti itu di Swing.Oleh karena itu perlu sedikit modifikasi agar textfield atau text area kita bisa  memiliki fasilitas popup menu tersebut. ?

Lalu bagaimana cara membuat popup menu menggunakan Swing. Caranya mudah, kita kita hanya tinggal menggunakan JPopupMenu dan menambahkannya ke dalam JTextField atau JtextArea yang ingin ditambahkan fasilitas Popup?
Ikuti beberapa langkah di bawah ini :

1.    Agar kita tidak repot mengeset JTextField berkali-kali jika ingin menambahkan fasilitas popup, maka akan lebih baik jika kita melakukan sedikit modifikasi atau membuat komponen TextField baru yang meng-Extend kelas JTextField. Caranya adalah buat kelas baru bernama TextWithPopUp.java

2.    Tambahkan kode extend JTextField.

3.    Isi source code kelas TextWithPopUp selengkapnya sesuai dengan kode di bawah ini :

/*
*  Copyright 2012 Ganjar Ramadhan
*  All Right reserved
*
*
*  DILARANG MENGUBAH ATAU MENGHAPUS LICENSE INI!!!
*
*  Source code ini merupakan hak milik dari Ganjar Ramadhan
*  Anda tidak diperkenankan untuk mengubah atau menggunakan file
*  ini kecuali anda tidak menghapus atau merubah isi dari
*  license ini.
*
*  Saya tidak bertanggung jawab atas efek yang ditimbulkan oleh
*  source code yang terdapat dalam file ini.
*  Untuk pertanyaan dan informasi seputar teknologi informasi
*  silahkan klik https://ganjarramadhan.wordpress.com/
*
*  Best Regards,
*
*
*  Ganjar Ramadhan (https://ganjarramadhan.wordpress.com/)
*  SarangLebah Informatics
*/

package blog.ganjar.popupmenu;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.JSeparator;
import javax.swing.JTextField;
import javax.swing.event.UndoableEditEvent;
import javax.swing.event.UndoableEditListener;
import javax.swing.undo.CannotRedoException;
import javax.swing.undo.CannotUndoException;
import javax.swing.undo.UndoManager;

/**
*
* @author Ganjar Ramadhan
*/
public class TextWithPopUp extends JTextField{

JPopupMenu popup = new JPopupMenu();
JTextField text = this;
UndoManager manager = new UndoManager();
JMenuItem menuCut = new JMenuItem("Cut");
JMenuItem menuCopy = new JMenuItem("Copy");
JMenuItem menuPaste = new JMenuItem("Paste");
JMenuItem menuUndo = new JMenuItem("Undo");
JMenuItem menuRedo = new JMenuItem("Redo");

public TextWithPopUp() {
super();
initAksi();
initPopup();
}

private void initPopup(){
this.setComponentPopupMenu(popup);
popup.add(menuCut);
popup.add(menuCopy);
popup.add(menuPaste);
JSeparator separator = new JSeparator();
popup.add(separator);
popup.add(menuUndo);
popup.add(menuRedo);
}

private void initAksi(){
menuCut.setIcon(new ImageIcon(getClass().getResource("/blog/ganjar/popupmenu/icon/cut-icon.png")));
menuCut.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
text.cut();
}
});

menuCopy.setIcon(new ImageIcon(getClass().getResource("/blog/ganjar/popupmenu/icon/Copy-icon.png")));
menuCopy.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
text.copy();
}
});

menuPaste.setIcon(new ImageIcon(getClass().getResource("/blog/ganjar/popupmenu/icon/Paste-icon.png")));
menuPaste.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
text.paste();
}
});

text.getDocument().addUndoableEditListener(new UndoableEditListener() {
@Override
public void undoableEditHappened(UndoableEditEvent e) {
manager.addEdit(e.getEdit());
}
});

menuUndo.setIcon(new ImageIcon(getClass().getResource("/blog/ganjar/popupmenu/icon/Undo-icon.png")));
menuUndo.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
try {
manager.undo();
} catch (CannotUndoException cannotUndoException) {
System.err.println(cannotUndoException);
}
}
});

menuRedo.setIcon(new ImageIcon(getClass().getResource("/blog/ganjar/popupmenu/icon/Redo-icon.png")));
menuRedo.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
try {
manager.redo();
} catch (CannotRedoException cannotRedoException) {
System.err.println(cannotRedoException);
}
}
});
}
}

4.    Siapkan JFrame yang akan menampung TextField yang baru kita buat

5.    Drag kelas TextWithPopUp ke dalam Jframe sampai muncul gambar seperti JTextField biasa.

6.    Run Jframe lalu klik kanan di TextFieldnya. Kita sudah berhasil membuat popup menu

Oke selamat mencoba ya teman-teman. Nah, buat temen-temen yang mau source codenya bisa diunduh di sini. Untuk pdfnya bisa diunduh di sini.

KaloTapi permasalahannya adalah kita tidak bisa menemukan hal seperti itu di Swing.Oleh karena itu perlu sedikit modifikasi agar textfield ayau text area kita bisa  memiliki fasilitas popup menu tersebut.

Advertisements