JTable Right-Click popupmenu in Netbeans

会有一股神秘感。 提交于 2019-12-03 17:30:44

Why do you rely on an IDE to generate code for you? What happens when you move to a different IDE and you have to learn how to do it for that ide? Learn how to write your own code then the IDE doesn't matter:

table.addMouseListener( new MouseAdapter()
{
    public void mouseReleased(MouseEvent e)
    {
        if (e.isPopupTrigger())
        {
            JTable source = (JTable)e.getSource();
            int row = source.rowAtPoint( e.getPoint() );
            int column = source.columnAtPoint( e.getPoint() );

            if (! source.isRowSelected(row))
                source.changeSelection(row, column, false, false);

            popup.show(e.getComponent(), e.getX(), e.getY());
        }
    }
});

Hopefully I can answer it for Netbeans... and I hope this helps someone

  1. adding a popupmenu to the form (it goes in Other Components) call it jPopupMenu for example
  2. adding menuitems to the popupmenu
  3. go to properites of JTable (call it jTableDataOrSomething for example)
  4. click binding tab (or right click on jTable Bind > elements)
  5. set ComponentPopupMenu value to my called jPopupMenu

    Next steps,

  6. while in properties select Events and goto mouseReleased set it to your jTableDataOrSomething (or right click on table, Events > Mouse > mouseReleased)

    Netbeans creates an empty function and set the following code

    private void jTableDataOrSomethingMouseReleased(java.awt.event.MouseEvent evt) {
    if (evt.isPopupTrigger())
    {
        JTable source = (JTable)evt.getSource();
        int row = source.rowAtPoint( evt.getPoint() );
        int column = source.columnAtPoint( evt.getPoint() );
    
        if (!source.isRowSelected(row)) {
            source.changeSelection(row, column, false, false);
        }
        jPopupMenu.show(evt.getComponent(), evt.getX(), evt.getY());
    }
    }
    
  7. create the menuitem action performed for EACH menu item

    Then in there you can use:

        int[] rows = jTableDataOrSomething.getSelectedRows();
        for (int row : rows) {
            boolean j = true;
            try {
                modelRow = jTableDataOrSomething.convertRowIndexToModel(row);
                //do something with the selected rows...
    

This takes multirow selection and considers sorting/filtering.

Finish the function with

    jTableDataOrSomething.repaint();

Enjoy

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!