-1

所以,我有以下代码:

JMenu debug = new JMenu("Debug");
    debug.add(new Debug());

然后Debug类是:

public class Debug extends JMenuItem {

    public final String TEST_DEBUG = "Test";

    public Debug() {
        add(TEST_DEBUG, this);
    }
}

运行应用程序后,我收到以下错误:

线程“AWT-EventQueue-0”java.lang.IllegalArgumentException 中的异常:将容器的父级添加到自身

我知道这意味着什么,但我不知道如何在不将容器父级放置到自身的情况下做到这一点?我如何将字符串传递给 JMenu?

我正在尝试通过 Debug 类将字符串(TEST_DEBUG)传递给 JMenu(调试)。

4

3 回答 3

1

你的意思是:

JMenuItem#add(String s)

public Debug() {
        add(TEST_DEBUG);
    }

编辑:

public class Debug extends JMenuItem {

    public Debug() {
        setText("");
    }
    public Debug(String text){
     add(text);
   }
   }

然后:

Debug obj = new Debug("text one");
Debug obj2 = new Debug("text two");
Debug obj3 =new Debug();
debug.add(obj);
debug.add(obj2);
debug.add(obj3);
于 2013-08-21T23:21:50.667 回答
1

基本上你不能给自己添加一个容器,这就是你在做什么..

将您的代码更改为

class DEBUG extends JMenuItem{ 

     public final String TEST_DEBUG = "Test";
    DEBUG(){
        JMenuItem addme = new JMenuItem(TEST_DEBUG);
    this.add(addme);    
    }
}

然后在你的主课上

     debug.add(new Debug());

那应该工作

于 2013-08-21T23:31:01.547 回答
1

这个...

public class Debug extends JMenuItem {

    public final String TEST_DEBUG = "Test";

    public Debug() {
        add(TEST_DEBUG, this);
    }
}

...没有任何意义。您是在说,“我想通过TEST_DEBUG”....的约束将自己添加到自己JMenuItem身上

JMenuItem menuItem = new JMenuItem(TEST_DEBUG);

然后将此添加到您的JMenu...

如果你想重用菜单项或它的动作,你应该使用ActionsAPI

于 2013-08-21T23:37:23.277 回答