Foros del Web » Programación para mayores de 30 ;) » Java »

JPopupMenu en JList no se muestra

Estas en el tema de JPopupMenu en JList no se muestra en el foro de Java en Foros del Web. Hola de nuevo Estoy tratando de mostrar un menu al hacer click a los elementos de una lista, pero no lo consigo, creo que estoy ...
  #1 (permalink)  
Antiguo 11/02/2014, 14:28
 
Fecha de Ingreso: abril-2010
Mensajes: 78
Antigüedad: 14 años
Puntos: 0
JPopupMenu en JList no se muestra

Hola de nuevo

Estoy tratando de mostrar un menu al hacer click a los elementos de una lista, pero no lo consigo, creo que estoy haciendo algo mal

Pasteo el código para que lo veáis


Código:
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;

public class MainClass {

private static JPopupMenu popup;
  
public static void main(final String args[]) {
    final String labels[] = { "A", "B", "C", "D", "E" };
    JFrame frame = new JFrame("JList");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JList jlist = new JList(labels);
    JScrollPane scrollPane1 = new JScrollPane(jlist);
    frame.add(scrollPane1);
    
    popup = new JPopupMenu();
    popup.add(new JMenuItem("uno"));
    popup.add(new JMenuItem("dos"));

    
    
    MouseListener mouseListener = new MouseAdapter() {

      
    	public void mousePressed(MouseEvent mouseEvent) {
      	  JList theList = (JList) mouseEvent.getSource(); 
      	  int index = theList.locationToIndex(mouseEvent.getPoint());
            if (index >= 0) {
              Object o = theList.getModel().getElementAt(index);
              if (mouseEvent.isPopupTrigger()) { 
                  popup.show(mouseEvent.getComponent(),
                		  mouseEvent.getX(), mouseEvent.getY());
              }
            }
        }

    };
    jlist.addMouseListener(mouseListener);

    frame.setSize(350, 200);
    frame.setVisible(true);
  }
}

Un saludo y gracias de antemano
  #2 (permalink)  
Antiguo 11/02/2014, 16:46
 
Fecha de Ingreso: abril-2010
Mensajes: 78
Antigüedad: 14 años
Puntos: 0
Respuesta: JPopupMenu en JList no se muestra

Al final después de un descanso para despejar la mente, y leyendo y leyendo mucho, lo conseguí.

Si algúno sabe de algo que este mal, porfavor, decirlo

Código:
import java.awt.Component;
import java.awt.EventQueue;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JFrame;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.SwingUtilities;
import javax.swing.table.AbstractTableModel;


public class AllTableExample {

	private JPopupMenu popup;
    private JTabbedPane tabbedPane;
    private JTable allTable;
    private AllTableModel allTableModel;
	private List<TableData> data;
	static int selected = -1;
	private JFrame frame;
    public AllTableExample() {

        data = new ArrayList<TableData>();
        data.add(new TableData("test1"));
        data.add(new TableData("test2"));
        data.add(new TableData("test3"));
        data.add(new TableData("test4"));
        data.add(new TableData("test5"));

        allTableModel = new AllTableModel(data);
        
    }

    public void createUI() {
        frame = new JFrame();

        tabbedPane = new JTabbedPane();
        popup = new JPopupMenu();
        tabbedPane.add("All", getAllTablePanel());
        JMenuItem delete = new JMenuItem("Delete");
        popup.add(delete);
        delete.addActionListener(new ActionListener() 
        {
            @Override
            public void actionPerformed(ActionEvent e) {
            	int del = allTable.getSelectedRow();
            	data.remove(del);
            	frame.repaint();
                JOptionPane.showMessageDialog((Component) frame, del);
            }

        });
        
        frame.add(tabbedPane);	
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setTitle("Table Model Example.");
        frame.pack();
        frame.setVisible(true);
    }
    
    

    
    private void mostrarPopupMenu(MouseEvent e) {
        
        if (e.isPopupTrigger()) { 
            popup.show(e.getComponent(),
                       e.getX(), e.getY());
        }

    }
    


    private JPanel getAllTablePanel() {
        JPanel panel = new JPanel();
        allTable = new JTable(allTableModel);
        JScrollPane scroll = new JScrollPane(allTable);
        panel.add(scroll);
        
        allTable.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseReleased(MouseEvent e) {
            	
            	if ( SwingUtilities.isLeftMouseButton( e ) )
        		{
        			selected = allTable.getSelectedRow();
        		}

        		else if ( SwingUtilities.isRightMouseButton( e ))
        		{

            		Point p = e.getPoint();

    			int rowNumber = allTable.rowAtPoint( p ); 
    			 ListSelectionModel model = allTable.getSelectionModel();
    			 model.setSelectionInterval( rowNumber, rowNumber );
            		selected = rowNumber;
            		frame.repaint();
            		mostrarPopupMenu(e);

        		}

            }


            });

        return panel;
    }
    
    

    public static void main(String[] args) {
        Runnable r = new Runnable() {

            @Override
            public void run() {
                new AllTableExample().createUI();
            }
        };

        EventQueue.invokeLater(r);
    }

}


class AllTableModel extends AbstractTableModel {

    List<TableData> tableData = new ArrayList<TableData>();

    Object[] columnNames = {"Name"};

    public AllTableModel(List<TableData> data) {

        tableData = data;
    }

    public List<TableData> getTableData() {
        return tableData;
    }

    @Override
    public String getColumnName(int column) {
        return columnNames[column].toString();
    }

    
    public int getColumnCount() {
        return columnNames.length;
    }

    @Override
    public int getRowCount() {
        return tableData.size();
    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        TableData data = tableData.get(rowIndex);

            return data.getName();
        
        }
    }




class TableData {

    private String name;


    public TableData(String name) {
        super();
        this.name = name;

    }

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    
}
  #3 (permalink)  
Antiguo 11/02/2014, 16:59
 
Fecha de Ingreso: abril-2010
Mensajes: 78
Antigüedad: 14 años
Puntos: 0
Respuesta: JPopupMenu en JList no se muestra

He notado que cuando vas borrando, donde había una linea aun se puede hacer click y muestra el desplegable y al darle a Delete peta (lógico porque no hay nada)

si se ha borrado la linea, como se puede deshabilitar el que salga el desplegable donde ya no hay nada?

Etiquetas: jlist, muestra, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:44.