Лучший способ создания подкласса JPanel в Swing

StackOverflow https://stackoverflow.com/questions/619055

  •  03-07-2019
  •  | 
  •  

Вопрос

В настоящее время я пытаюсь создать расширяющуюся панель в Swing (аналогичную WPF Expander control), и я хотел бы сохранить обычные методы управления им (i.e. setLayout, add, и т.д.).Только они должны быть перенаправлены на встроенную панель (ту, которая отображается или скрыта).

Как бы это сделать?Переопределение каждого метода JComponent и перенаправить это на встроенный JPanel было бы громоздко, но это единственный способ, который я вижу.

Или я должен скорее сделать встроенную панель видимой снаружи и заставить пользователей использовать что-то вроде ExpanderPanel.getInnerPanel() вместо этого.Но тогда это не прямая замена JPanel который, я думаю, было бы неплохо иметь.

Это было полезно?

Решение

В версии 1.5 (ish) Swing перенаправил несколько методов на панель контента в JFrame , JApplet и т. д. Хотя для тех, кто только начинает работать, появились некоторые преимущества юзабилити , это на самом деле не решает проблему. Таким образом, каждый должен иметь дело с очень странным поведением API. Поэтому я советую избегать такого подхода.

Другие советы

Посмотрите на JXTaskPane из проекта Swingx . Он уже делает то, что вам нужно.

Если у вас есть виджет контейнера, который содержит панель, которую вы хотите показать и скрыть, почему бы не расположить вашу внутреннюю панель так, как вы хотите, затем добавить ее на панель контейнера, а затем использовать статические методы для контейнера, чтобы сказать

JPanel p = новая JPanel();//сделайте что-нибудь с JPanel...

ContainerWidget.setContent(p) Контейнерный виджет.setContent(p);

ContainerWidget.expandPanel(p, true);

Сработает ли что-нибудь подобное этому?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top