sábado, 14 de março de 2009

Associando um JPopupMenu em uma JTable

Olá povo,

Esse vai ser um post curto só pra mostrar como associar um menu popup a uma JTable. Eu precisava alterar e excluir um registro selecionado de uma JTable. Vamos ver como fazer isso.

Primeiro crie um objeto JPopupMenu e adicione dois JMenuItem.

JPopupMenu jPopupMenu = new JPopupMenu();
JMenuItem jMenuItemAlterar = new JMenuItem();
jMenuItemAlterar.setText("Alterar");

jMenuItemAlterar.addActionListener(
new java.awt.event.ActionListener() {
// Importe a classe java.awt.event.ActionEvent
public void actionPerformed(ActionEvent e) {
int index = getJTable().getSelectedRow();
// Faça alguma coisa com o item selecionado
}
});

JMenuItem jMenuItemExcluir = new JMenuItem();
jMenuItemExcluir.setText("Excluir");
jMenuItemExcluir.addActionListener(
new java.awt.event.ActionListener() {
// Importe a classe java.awt.event.ActionEvent
public void actionPerformed(ActionEvent e) {
int index = getJTable().getSelectedRow();
// Faça alguma coisa com o item selecionado
}
});

jPopupMenu.add(jMenuItemAlterar);
jPopupMenu.add(jMenuItemExcluir);

Depois só é exibir o menu popup quando o usuário clicar com o botão direito do mouse.


jTable.addMouseListener(
new java.awt.event.MouseAdapter() {
//Importe a classe java.awt.event.MouseEvent
public void mouseClicked(MouseEvent e) {
// Se o botão direito do mouse foi pressionado
if (e.getButton() == MouseEvent.BUTTON3){
// Exibe o popup menu na posição do mouse.
jPopupMenu.show(jTable, e.getX(), e.getY())
}
}
});

E é só isso!

4br4ç05,
nglauber

3 comentários:

Wesley Silva disse...

Não conseguir fazer. Tem alguma diferença se a JTable estiver em um JScrollPane ?

Nelson Glauber disse...

Oi Wesley,

Como pode ver, o post é bem antigo. Mas creio que não haveria problemas em relação ao JSCrollPane.

4br4ç05,
nglauber

Wesley Silva disse...

É, realmente é muito antigo mesmo...

Consegui fazer, o problema era que coloquei sem querer, para adicionar ao invés de um JItemMenu, coloquei para adicionar um JButton...

Obrigado Nelson... :)