Itens de um JPopupMenu nao são selecionados[Resolvido]

4 respostas
C

Ola!
Estou com o seguinte problema:
Tenho uma JTable e ao pressionar com o botão direito do mouse dentro desta tabela, eu seleciono a linha da tabela onde o cursor se encontra e abro um JPopupMenu com dois itens.
Quando eu passo o mouse por cima destes itens (JMenuItem), eles nao são selecionados ( o background do item nao muda de cor), eu acho q por padrão ele deveria selecionar o item automaticamente.
Eu quero que a aplicação selecione os itens quando o cursor do mouse passar por cima deles.
Alguem ja passou por isto e teria a solução deste problema?

4 Respostas

C

Pode ter ficado um pouco confuso a minha explicação!

Vou passar um codigo aqui:
Basta clicar com o botao direito e note q os itens nao sao selecionados quando o cursor do mouse passa por cima deles.

import java.awt.BorderLayout;
import java.awt.TrayIcon;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.table.DefaultTableModel;

/**
 * @author Carlaum
 */
public class ExemploTabelaMenu extends JFrame
{
    JPopupMenu popUp;
    ImageIcon icone;
    TrayIcon trayIcon;
    JTable tabela;
    DefaultTableModel modeloTabela;
    JPanel panel;
    Object[] colunas =
    {
        "Coluna1", "Coluna2", "Coluna3"
    };
    Object[][] linhas =
    {
    };

    public ExemploTabelaMenu()
    {
        this.setTitle("Exemplo de Tabela com JPopupMenu");
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setSize(640, 480);
        this.setLocationRelativeTo(null); // Faz a janela ser criada no centro da tela
        this.criaMenu();

        panel = new JPanel(new BorderLayout());

        //Cria o modelo da tabela
        modeloTabela = new DefaultTableModel(linhas, colunas);
        //Cria a tabela
        tabela = new JTable(modeloTabela);
        tabela.addMouseListener(
                new MouseAdapter()
                {

                    public void mouseClicked(MouseEvent eventoMouse)
                    {
                        if (eventoMouse.getButton() == MouseEvent.BUTTON3)
                        {
                            popUp.setVisible(false);
                            popUp.setLocation(eventoMouse.getXOnScreen(), eventoMouse.getYOnScreen());
                            popUp.setVisible(true);
                        }
                        else
                        {
                            popUp.setVisible(false);
                        }
                    }
                });

        tabela.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        panel.add(tabela, BorderLayout.CENTER);

        Object[] item =
        {
            "linha1 item1", "linha1 item2", "linha1 item3"
        };
        Object[] item2 =
        {
            "linha2 item1", "linha2 item2", "linha2 item3"
        };
        modeloTabela.addRow(item);
        modeloTabela.addRow(item2);
        this.add(panel);
        this.setVisible(true);
    }

    /**
     * Cria o JPopupMenu e os JMenuItems
     */
    private void criaMenu()
    {
        popUp = new JPopupMenu();

        JMenuItem item1 = new JMenuItem("Teste");
        item1.addActionListener(
                new ActionListener()
                {

                    public void actionPerformed(ActionEvent e)
                    {
                        popUp.setVisible(false);
                    }
                });
        JMenuItem item2 = new JMenuItem("Sair");
        item2.addActionListener(
                new ActionListener()
                {

                    public void actionPerformed(ActionEvent e)
                    {
                        System.exit(0);
                    }
                });
        popUp.add(item1);
        popUp.addSeparator();// adiciona uma linha no popupMenu
        popUp.add(item2);
    }

    public static void main(String args[])
    {
        new ExemploTabelaMenu();
    }
}
kenneth

Fala camarada…

Sera que te ajuda?

http://www.devx.com/tips/Tip/17285

Abraco!

C

Ola!
Achei interessante esse codigo que vc me passou mas o meu problema esta mesmo em selecionar os itens do JPopupMenu e nao as celulas da JTable!
No meu programa eu seleciono as selulas da JTable mas esse exemplo que passei é bem simples que mostra apenas q os itens do JPopupMenu nao estao sendo selecionados.

Abraço

C

Consegui solucionar o problema!
é so mudar a forma como eu chamo o JPopupMenu.
Segue a solução:

tabela.addMouseListener(
        new MouseAdapter(){
            public void mouseReleased(MouseEvent e){
                if(e.isPopupTrigger())
                    popUp.show(e.getComponent(), e.getX(), e.getY());
            }
        }
    );
Criado 27 de outubro de 2009
Ultima resposta 27 de out. de 2009
Respostas 4
Participantes 2