2013-08-21 42 views
-1

所以,我有以下代码:JMenu对象和JMenuItem的

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

然后调试类是:

Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: adding container's parent to itself

public class Debug extends JMenuItem { 

    public final String TEST_DEBUG = "Test"; 

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

运行的应用程序,我得到以下错误后

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

我想通过调试类将字符串(TEST_DEBUG)传递给JMenu(调试)。

+0

问题是'Debug'类的构造函数。通过传递'this',你试图在它自身上添加Debug(它是JMenuItem)。 –

+0

我明白了。我如何将字符串传递给JMenu?使用调试构造函数。 – user2527967

+0

什么字符串和从哪里? –

回答

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); 
+0

是的,但这不起作用。我的IDE要求:JMenuItem#add(String s,Component c) – user2527967

+0

'setText(TEST_DEBUG);'? –

+0

是的,但如果我想添加更多的字符串,它只会有一个。 – user2527967

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()); 

应该工作

1

这...

public class Debug extends JMenuItem { 

    public final String TEST_DEBUG = "Test"; 

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

.. 。没有任何意义。你是在说,“我要自己添加到自己与TEST_DEBUG约束” ...... JMenuItem是一个类型的按钮,如果你想设置它的文本,你应该使用

的JMenuItem菜单项=新的JMenuItem(TEST_DEBUG );

然后添加到您的JMenu ...

如果你想重新使用的菜单项或它的行动,你应该利用Actions API