奇怪的JMenu位置问题

时间:2012-08-28 17:10:15

标签: java swing jmenu

当我看到一个奇怪的问题时,我试图将两个JMenus添加到父JMenu中:

StateListener stL = new StateListener();            
SpeedListener spL = new VitesseListener();

animation.add(speed);
animation.add(state);

 //Add of JRadiobuttons (st1, st2 and st3) to JMenu : state
 state.add(st1); 
 state.add(st2);
 state.add(st3);

  //Add of JRadiobuttons to ButtonGroup : bG1
  bG1.add(st1);
  bG1.add(st2);
  bG1.add(st3);

   //Setting a default selected button
   st2.setSelected(true);

    //Add of an action listener to JRadioButtons (StateListener : stL)
    st1.addActionListener(stL);
    st2.addActionListener(stL);
    st3.addActionListener(stL);

 //Same code, with speed this time
 speed.add(sp1);
 speed.add(sp2); [...]

这段代码效果很好,但是当我将速度和状态添加到动画时,就像我在下面的代码中所做的那样,代码有一种“bug”。事实上,当我将鼠标移到“速度菜单”上时,一切都被卡住了,我无法做任何事情(以干净的方式关闭程序):

[...] animation.add(stae);
animation.add(speed); [...]  

感谢您的帮助,对不起我的蹩脚(我甚至不知道我是否可以使用这个词而不是粗俗的^^)英语。

2 个答案:

答案 0 :(得分:1)

对我来说,我会用

this.setPreferredSize(new Dimension(800,245));

如果你正在使用任何布局管理器。见setSize() vs. setPreferredSize()

答案 1 :(得分:0)

我发现了我的问题:速度的JMenu包含8个JRadioButton。我的第八个按钮出了我的窗户(高度太小),这就是腐烂我的程序。我的程序与反向JMenus(首先是速度和第二速度)一起工作的事实是因为州的JMenu大小。事实上,它更短(包含3个JRadioButtons而不是8个速度),当我把它放在速度的JMenu之下时,这个是上层,并且有20px以上的东西,足够一个JRadioButton。

我用八个方法解决了这个问题:

this.setSize(800,245);

而不是

this.setSize(800,230);

谢谢你的帮助安德鲁,做了一个SSCCE改变了我的观点,我很快就看到了我的问题;)