JTable Щелкните правой кнопкой мыши всплывающее меню в Netbeans - PullRequest
4 голосов
/ 14 июля 2010

Я хочу добавить контекстное меню правой кнопкой мыши в JTable в IDE NetBeans (кажется простой задачей ... смеется)

Я получил его на частичную работу

  1. добавление всплывающего меню в форму
  2. добавление пунктов меню во всплывающее меню
  3. перейти к свойствам JTable
  4. нажмите вкладку привязки
  5. установить значение ComponentPopupMenu для моего всплывающего меню

Но это только частично работает. Теперь, когда я щелкаю правой кнопкой мыши по таблице, появляется меню, но выбранная строка в JTable не изменяется. Поэтому, когда вызывается actionPerformed элемента меню, я понятия не имею, по какой строке в JTable щелкнули.

Как я могу получить это? или есть более простой способ сделать это в NetBeans?

Я знаю, что есть другие способы сделать это (в коде), но я бы предпочел использовать конструктор GUI netbeans.

Кто-нибудь когда-нибудь делал это раньше?

Спасибо за вашу помощь!

Ответы [ 2 ]

10 голосов
/ 14 июля 2010

Почему вы используете IDE для генерации кода для вас? Что происходит, когда вы переходите в другую среду IDE, и вам нужно научиться делать это для этой идеи? Узнайте, как написать собственный код, тогда IDE не имеет значения:

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());
        }
    }
});
0 голосов
/ 25 октября 2013

Надеюсь, я смогу ответить за Netbeans ... и я надеюсь, что это кому-нибудь поможет

  1. добавление всплывающего меню в форму (оно входит в другие компоненты), вызвать его jPopupMenu, например
  2. добавление пунктов меню во всплывающее меню
  3. перейти к свойствам JTable (например, назовите его jTableDataOrSomething)
  4. щелкните вкладку привязки (или щелкните правой кнопкой мыши элемент jTable Bind> elements)
  5. установить значение ComponentPopupMenu для моего вызываемого jPopupMenu

    Следующие шаги,

  6. в то время как в свойствах выберите События и перейдите к отпусканию мыши, установите для него значение jTableDataOrSomething (или щелкните правой кнопкой мыши по таблице, События> Мышь> MouseReleased)

    Netbeans создает пустую функцию и устанавливает следующий код

    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. создать действие пункта меню, выполняемое для КАЖДОГО пункта меню

    Тогда вы можете использовать:

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

Это принимает выбор из нескольких строк и учитывает сортировку / фильтрацию.

Завершите функцию нажатием

    jTableDataOrSomething.repaint();

Наслаждайтесь

...