Пользовательское меню строки заголовка окна Java - PullRequest
3 голосов
/ 20 июня 2011

Я пытаюсь разрешить пользователю изменять заголовок окна в Java без добавления компонентов в само окно.Я на самом деле пытаюсь это сделать с JInternalFrame, но думаю, что решение должно быть аналогичным для JFrame.Я просто хочу добавить дополнительный пункт меню в контекстное меню, которое появляется при щелчке правой кнопкой мыши на строке заголовка окна.Например, Установить заголовок ниже:

enter image description here

Этот пример на Windows XP, но, возможно, есть способ получить оконное контекстное меню ОС, возможно, независимоаналогично SystemTray.getSystemTray() (но для отдельных окон в приложении).Исходя из этого, я смогу предоставить свой собственный ActionListener для всплывающего диалогового окна, в котором пользователь может ввести новый заголовок.

Это гораздо более сложная задача, чем я предполагаю?У кого-нибудь есть решения, которые они использовали раньше?

Ответы [ 2 ]

2 голосов
/ 20 июня 2011

Краткий ответ: я не думаю, что это легко. Я не уверен на 100%, если это возможно.

Во-первых, JFrame и JInternalFrame на самом деле совершенно разные. JFrame - это компонент верхнего уровня, строка заголовка и тому подобное обычно предоставляется ОС. Весь контент JInternalFrame (включая строку заголовка) предоставлен Swing LAF.

Для JInternalFrame контекстное меню предоставляется LAF, а не самой JInternalFrame. Вам нужно будет что-то сделать с UIComponent, чтобы изменить контекстное меню. Я думаю, что вам, вероятно, придется предоставить пользовательский компонент пользовательского интерфейса, чтобы сделать это, что некрасиво и обычно разбивается на различные LAF или работает, но выглядит в лучшем случае ужасно. См. BasicInternalFrameTitlePane , метод createSystemMenu.

1 голос
/ 20 июня 2011

Я не думаю, что это возможно без углубления во внутреннюю систему пользовательского интерфейса Swing, и я бы даже не подумал об этом. Почему бы вам не использовать встроенный JMenuBar из JInternalFrame?

myInternalFrame.setJMenuBar(myMenuBar);
...