Swing: «тонкий» стандартный компонент, выступающий в роли контейнера? - PullRequest
2 голосов
/ 04 февраля 2010

Мне нужно выбрать стандартный контейнер (JPanel?) В Swing, который я могу использовать в качестве заполнителя, к которому я могу добавить другой пользовательский компонент, расширяющий JPanel:

JPanel containerPanel;
// built by a library from a text file, automatically part of a nice layout
MyPanel componentPanel; 
// something complicated that I can't integrate with the builder library

containerPanel = builder.getMyContainerPanel();
componentPanel = new MyPanel(...);
containerPanel.add(componentPanel);

Есть ли способ как-то связать два размера панели, чтобы изменение размера работало правильно? Я не совсем уверен, как изменение размера работает в разгаре, но я хочу, чтобы внешний containerPanel был тонкой оболочкой, подчиняющейся моему componentPanel, и внешняя панель делегирует как можно больше внутренней панели.

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

Ответы [ 3 ]

2 голосов
/ 04 февраля 2010

Вы можете использовать BorderLayout и добавить свой контейнер делегата в позицию BorderLayout.CENTER.

2 голосов
/ 04 февраля 2010

Я бы просто использовал GridLayout.

containerPanel.setLayout(new GridLayout(1, 1));

Преимущество этого заключается в том, что вы можете просто добавить дополнительную панель без каких-либо параметров, и она гарантированно использует всю область:

containerPanel.add(componentPanel);
0 голосов
/ 04 февраля 2010

Хм. Итак, я решил переписать свой компонент, поэтому вместо класса, расширяющего JPanel (наследование), он использует композицию и создается с пустым JPanel в качестве параметра + он добавляет дочерние компоненты в JPanel. Таким образом, я могу использовать библиотеку компоновщика для создания пустого JPanel, а затем я передаю это в конструктор моего собственного компонента, так что теперь у меня есть 1 JPanel вместо двух, которые я должен связать вместе.

...