【问题标题】:How do I reuse a protected JMenuItem variable across methods?如何跨方法重用受保护的 JMenuItem 变量?
【发布时间】:2012-07-18 00:07:13
【问题描述】:

为什么在actionPerformed()类的第一行,我不能使用我在MainMenuBar()类顶部声明的protected JMenuItem menuItem;变量?

第二行是我注释掉的那一行,它可以工作。

但是,我希望能够跨类使用一个 JMenuItem 对象名称,而不必重新实例化它。

如何正确重用 menuItem?

谢谢。

package base;

import javax.swing.JMenuBar;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JTextArea;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;

public class MainMenuBar implements ActionListener {
    protected JMenuBar menuBar;
    protected JMenu menu;
    protected JMenuItem menuItem;

    JTextArea output;
    String newline = "\n";

    public JMenuBar getMenuBar() {
        menuBar = new JMenuBar();

        // 1st Menu
        menu = new JMenu("File");
        menu.setMnemonic(KeyEvent.VK_F);

        menuItem = new JMenuItem("New Note");
        menuItem.setMnemonic(KeyEvent.VK_N);

        menu.add(menuItem);
        menu.addSeparator();

        menuItem = new JMenuItem("Exit");
        menuItem.setMnemonic(KeyEvent.VK_X);

        menu.addActionListener(this);
        menu.add(menuItem);

        menuBar.add(menu);

        // 2nd Menu
        menu = new JMenu("Help");
        menu.setMnemonic(KeyEvent.VK_H);

        menuItem = new JMenuItem("About Java Sticky Notes");
        menuItem.setMnemonic(KeyEvent.VK_A);

        menu.addActionListener(this);
        menu.add(menuItem);

        menuBar.add(menu);

        return menuBar;
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        menuItem source = new JMenuItem("MainMenuBar.java");
        //JMenuItem source = (JMenuItem) (e.getSource());
        String s = "Action event detected." + newline + "    Event source: "
                + source.getText() + " (an instance of " + getClassName(source)
                + ")";
        output.append(s + newline);
        output.setCaretPosition(output.getDocument().getLength());
    }

    // Returns just the class name -- no package info.
    protected String getClassName(Object o) {
        String classString = o.getClass().getName();
        int dotIndex = classString.lastIndexOf(".");
        return classString.substring(dotIndex + 1);
    }
}

【问题讨论】:

    标签: java swing protected


    【解决方案1】:

    你有一个语法错误,编译器假定menuItem 是一个类,因为它后面跟着source。更改以下内容:

    menuItem source = new JMenuItem("MainMenuBar.java");
    

    到:

    menuItem = new JMenuItem("MainMenuBar.java");
    

    但是您必须注意source,因为它在以下几行中使用。

    【讨论】:

      猜你喜欢
      • 2011-03-23
      • 1970-01-01
      • 2011-08-02
      • 2020-03-31
      • 2020-03-05
      • 2011-06-23
      • 2016-02-19
      • 2012-05-22
      • 1970-01-01
      相关资源
      最近更新 更多