Как изменить подсказку menuItem из собственного слушателя действий? - PullRequest
0 голосов
/ 06 февраля 2012

Я не уверен, что я делаю здесь неправильно, или даже как улучшить поиск, чтобы покрыть это.Поиск динамических изменений в меню возвращает массу информации, но я не могу найти то, что конкретно ищу.Я хочу динамически добавлять подменю на основе текущего содержимого массива и изменять подсказку для меню.В качестве подтверждения концепции я просто попытался изменить всплывающую подсказку внутри пунктов меню actionListener.Я думаю, что я столкнулся с проблемой области с именем DeleteTask.Когда я пытаюсь использовать его внутри обработчика, я получаю сообщение об ошибке Final.Когда я делаю это, я получаю ошибку «символ не найден».Прошло несколько месяцев с тех пор, как я использовал Java для кодирования, так что я мог бы использовать одну или две концепции.

JMenuItem DeleteTask = new JMenuItem("Delete Task");
DeleteTask.setMnemonic(KeyEvent.VK_D);
DeleteTask.setToolTipText("Delete a Task");
DeleteTask.addActionListener(new ActionListener() {

 public void actionPerformed(ActionEvent event) {
  if(testCondition)
  {
    DeleteTask.setToolTipText("Changed Tool Tip");                
  }
  else  //testing
  {

    DeleteTask.setToolTipText("Delete a Task"); 
  }

}
});

Может кто-нибудь объяснить, почему этот метод не позволяет мне менять подсказку?Какой метод я должен использовать, чтобы внести эти изменения?Любые советы по поиску будет принята с благодарностью.Спасибо.

1 Ответ

3 голосов
/ 07 февраля 2012

не уверен, что случилось, должна быть другая проблема в вашем коде, но все может быть .... только предположения, мой SSCCE

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

public class ActionExample {

    private boolean testCondition = false;
    private JMenuItem DeleteTask = new JMenuItem("Delete Task");

    public ActionExample() {
        Action sample = new SampleAction();
        DeleteTask.setMnemonic(KeyEvent.VK_D);
        DeleteTask.setToolTipText("Delete a Task");
        DeleteTask.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent event) {
                if (testCondition) {
                    testCondition = false;
                    DeleteTask.setToolTipText("Changed Tool Tip");
                } else {
                    testCondition = true;
                    DeleteTask.setToolTipText("Delete a Task");
                }
            }
        });
        JMenu menu = new JMenu("Menu");
        menu.setMnemonic(KeyEvent.VK_M);
        menu.add(sample);
        menu.add(DeleteTask);
        menu.addMenuListener(new SampleMenuListener());
        JToolBar tb = new JToolBar();
        tb.add(sample);
        JTextField field = new JTextField(10);
        field.setAction(sample);
        JFrame f = new JFrame("ActionExample");
        JMenuBar mb = new JMenuBar();
        mb.add(menu);
        f.setJMenuBar(mb);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.getContentPane().add(tb, BorderLayout.NORTH);
        f.getContentPane().add(field, BorderLayout.SOUTH);
        f.pack();
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                ActionExample actionExample = new ActionExample();
            }
        });
    }
}

class SampleMenuListener implements MenuListener {

    @Override
    public void menuSelected(MenuEvent e) {
        System.out.println("menuSelected");
    }

    @Override
    public void menuDeselected(MenuEvent e) {
        System.out.println("menuDeselected");
    }

    @Override
    public void menuCanceled(MenuEvent e) {
        System.out.println("menuCanceled");
    }
}

class SampleAction extends AbstractAction {

    private static final long serialVersionUID = 1L;

    public SampleAction() {
        super("Sample");
        putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke("alt S"));
        putValue(MNEMONIC_KEY, new Integer(KeyEvent.VK_S));
        putValue(SHORT_DESCRIPTION, "Just a sample action");
    }

    @Override
    public void actionPerformed(ActionEvent evt) {
        System.out.println("sample...");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...