2012-08-28 8 views
1

Я пытался добавить два JMenus родителю JMenu, когда я увидел странную проблему:Странная 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); [...] 

Этот код отличный работает, но когда я переключаю добавление скорости и состояния анимации , как и в приведенном ниже коде, код имеет своего рода «ошибку». В самом деле, когда я прохожу мышь через меню «скорость», все застревает, и я ничего не могу (закрыть программу в чистом виде в комплекте) делать:

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

Спасибо за вашу помощь и извините за мой хреново (Я даже не знаю, могу ли я использовать это слово, не будучи вульгарным ^^) английским.

+1

1) Для лучшей помощи в ближайшее время опубликуйте [SSCCE] (http://sscce.org/). 2) Пожалуйста, переведите примеры кода, размещенные на англоязычных форумах на английском языке, насколько это возможно. –

+2

Я попытался сделать SSCCE, и, как ни странно, моя проблема исчезла. Таким образом, я на самом деле пытаюсь найти, где проблема во всем моем коде (кажется, это опечатка или что-то в этом роде, поэтому я думаю, что могу сделать это в одиночку). Я отправлю решение, если найду его. Спасибо за вашу помощь в любом случае ^^ – I8u

+0

Сначала попробуйте удалить всех прослушивателей мыши (из «всего кода») и посмотреть, не исчезла ли проблема. –

ответ

0

Я нашел свою проблему: у JMenu скорости было 8 JRadioButton. Моя восьмая кнопка была из моего окна (которая имела слишком маленькую высоту), и это то, что гнило мою программу. Тот факт, что моя программа отлично работала с инвертированным JMenus (сначала скорость и состояние во-вторых) из-за размера JMenu штата. В самом деле, он был короче (содержит 3 JRadioButtons вместо 8 для скорости), и когда я помещал его под JMenu скорости, этот был верхним и имел нечто вроде 20px больше, достаточно для еще одного JRadioButton.

Я решил эту проблему с восемью changment:

this.setSize(800,245); 

вместо

this.setSize(800,230); 

Спасибо за вашу помощь Андрей.Фил, сделать SSCCE изменил свою точку зрения, и я Fastly увидел, что была моя проблема;)

+0

Содержит ли код Swing & AWT компоненты? –

+0

Умм .. Возможно, вы только что ответили «нет». Я спросил, потому что установка размера 'Window' или' JComponent' обычно является клокой, чтобы покрыть ошибку (которая, скорее всего, приведет к появлению новых ошибок), а не исправление ошибки. –

+0

Я думаю, что он делает, да: у меня 4 импорта: цвет, BorderLayout, ActionListener и ActionEvent. – I8u

1

Для меня я хотел бы использовать

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

Если вы используете любой менеджер компоновки. См. setSize() vs. setPreferredSize()

+0

Hum Я использую BorderLayout, но не прямо на моем JFrame. Вот почему я использовал «setSize» вместо «setPreferredSize». Я ошибаюсь, когда делаю это? – I8u

+0

См. Также [Должен ли я ** избегать использования методов {Предпочитаемый | Максимальный размер | Минимум} в Java Swing?] (Http: // stackoverflow.com/questions/7229226/should-i-avoid-the-use-of-setpreferredmaximumminimumsize-methods-in-java-swi) –

+0

хе-хе-а все вещи у JFrame есть и другая сторона монеты;) - лично, если я используйте некоторые JPanels на JFrame с GridBagLayout. Я предпочитаю использовать setPreferredSize() из-за поведения изменения размера окна. –