2009-09-14 5 views
0

Я работаю с приложением, которое использует GLCanvas. Я хотел бы добавить «плавающее меню» поверх него (что-то я сделал бы в Swing, добавив меню в стеклянную панель). Поскольку GLCanvas не расширяет Container, каким будет предложенный способ сделать это?Добавление компонентов в GLCanvas

ответ

0

GLCanvas inherits from java.awt.Component, поэтому, когда вы добавляете GLCanvas в свой JFrame, вы можете использовать стеклянную панель на вашем, содержащем JFrame.

Или, в зависимости от визуального эффекта, который вы хотите, после того, как ваша сцена сделана рендерингом на GLCanvas, добавьте вызов GL в glOrtho, а затем нарисуйте свое меню поверх сцены с помощью примитивов в самом GL, (хотя тогда вы бы застряли, сфальсифицировав свое поведение обратного вызова и т. д.). Я не уверен в вопросе, хотите ли вы в этом разобраться).

+0

Я не думаю, что смогу использовать стекло, поскольку холст будет нарисован поверх стекла, потому что это тяжеловесный компонент. И вы правы, я действительно не хочу начинать внедрять свои собственные механизмы обратного вызова и делать прямые вызовы GL. –

+0

Итак, если вы установите весовой компонент, который будет тяжелым, он все равно не работает? Хм ... попробовав это сейчас, я обнаружил, что вы можете без проблем создавать откидывающие меню без надписей: JPopupMenu.setDefaultLightWeightPopupEnabled (false); ToolTipManager.sharedInstance(). SetLightWeightPopupEnabled (false); (Хотя это нужно сделать, прежде чем что-либо делать с JFrame) – Decker

0

Вы говорите о всплывающем меню? Вы можете добавить MouseListener в свой GLCanvas (так как он простирается от Component), в MouseListener, проверьте mouseEvent.isPopupTrigger(), и если да, создайте свой JPopupMenu - поскольку вы хотите показать его над тяжеловесным компонентом, вызовите setLightweightPopupEnabled (false) перед показом JPopupMenu - затем вызовите show (glCanvas, x, y) на вашем JPopupMenu.

+0

Привет, Нейт, я не говорю о всплывающем меню здесь. Меню могло быть плохим описанием. Это больше плавающая панель. На данный момент он может находиться в фиксированном месте. Я предполагаю, что мне нужно будет использовать диспетчер компоновки, который позволяет мне перекрывать компоненты и иметь панель (awt), перекрывающую GLCanvas. –

Смежные вопросы