JButton внутри JMenuItem

Я пытаюсь построить конкретный JMenu. Я хочу JMenuItem с JMenu функциональностью, т.е. когда мы щелкаем по нему, элемент должен что-то делать (например, открывать диалог). Но JMenuItem также должен содержать кнопку (или другой компонент), при нажатии на которую должно открываться всплывающее окно с парой опций.

Итак, пока у меня есть что-то вроде этого:

Желаемый интерфейс

Это то, что у меня есть, прежде чем нажать стрелку.

Моя проблема в том, что когда я нажимаю кнопку (стрелку), подменю фактически открывается, но пункт меню, содержащий эту кнопку, закрывается, потому что теряет фокус.

Сломанный пользовательский интерфейс

Это результат после нажатия кнопки со стрелкой.

Есть ли способ управлять этим? Или лучший способ иметь такое поведение?


person Luis Gonçalves    schedule 19.10.2011    source источник
comment
Итак, вы хотите, чтобы один пункт меню (одна строка в меню) имел два разных поведения — выполнял какое-то действие при нажатии на текст и открывал подменю при нажатии на кнопку? Это было бы не очень удобно, лучше использовать группу меню для подменю, т.е. добавить новый (под) JMenu.   -  person Thomas    schedule 19.10.2011
comment
мой вопрос, почему вы поместили JButton в JMenu как JMenuItem, вас не устраивают базовые реализации   -  person mKorbel    schedule 19.10.2011
comment
@Thomas: Да, это именно то, что я хочу: выполнить действие при нажатии на текст и открыть всплывающее окно при нажатии на кнопку.   -  person Luis Gonçalves    schedule 19.10.2011
comment
Я не совсем уверен, что вам должно это делать. Тем не менее: чтобы быстрее получить помощь, опубликуйте SSCCE.   -  person Andrew Thompson    schedule 19.10.2011
comment
JButton m = new JButton(); JMenuBar abc = (JMenuBar) new JMenuBar().add(m); Как насчет этого?   -  person COD3BOY    schedule 19.10.2011
comment
Итак, я провел некоторое время, глядя на это, и понял, что MenuItem с кнопкой со стрелкой закрывается, потому что открывается новое всплывающее окно, не связанное с первым. Я решил эту проблему, просто добавив кнопку, которая переключается между вариантом 1 и вариантом 2, и в этом случае я избегаю второго всплывающего окна и всех проблем, связанных с ним. Спасибо за вашу помощь.   -  person Luis Gonçalves    schedule 24.10.2011


Ответы (4)


Мы можем помочь вам, если точно знаем, что вы пытаетесь реализовать. Если вы просто хотите выбрать параметр, вы можете лучше реализовать это с помощью JRadioButtonMenuItem, поэтому вам действительно не нужно реализовывать кнопку, а затем выбирать параметр. Но это зависит от того, что вы действительно хотите.

person COD3BOY    schedule 19.10.2011
comment
Я хочу именно то, что упомянул Томас. Я знаю, что это не удобно для пользователя, но в данный момент я должен попытаться это сделать. - person Luis Gonçalves; 19.10.2011

Это не то, для чего предназначено меню. Вместо этого используйте ленту, и все будет легко и естественно.

person Ingo Kegel    schedule 19.10.2011
comment
Я согласен, использование такого меню было бы довольно нелогичным. Ленты кажутся лучшей альтернативой. - person Thomas; 19.10.2011

Почему бы просто не использовать вместо этого простое вложенное JMenuItem? Что-то вроде это (первый экран сверху).

С другой стороны, вы можете воспользоваться аналогичным решением, описанным здесь.

person Wojtek Owczarczyk    schedule 19.10.2011

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

person Luis Gonçalves    schedule 24.10.2011