Как ограничить динамическое добавление компонентов в границах формы или панели - PullRequest
3 голосов
/ 25 июня 2011

Я пытаюсь динамически добавлять компоненты в jpanel из базы данных, одну за другой, однако они выходят за пределы формы (и даже экрана) по горизонтали.Я использую панель с BoxLayout, которая размещает внутренние компоненты на оси X.То, что я хотел бы сделать, это ограничить добавление компонентов по оси X на границе формы (или на границе панели контейнера).До сих пор я пробовал:

  • Чтобы установить максимальный размер (ширину) jpanel контейнера, но это не сработало.
  • Чтобы установить менеджер раскладки на Flowlayout, но этотакже расширяется бесконечно по оси X.
  • Чтобы расположить панель контейнера внутри области прокрутки.Это создает огромную горизонтальную полосу прокрутки, что означает, что она не ограничивает компоненты границей формы.

Должен ли я создать собственный макет?Любые идеи проще, чем это?Мой код выглядит так:

jpanelCases.setLayout(new BoxLayout(this.jpanelCases, BoxLayout.X_AXIS));
db = Database.getInstance();
List<Category> cats = db.getCategories();
for(Category c : cats){
            JPanel jp = new JPanel();
            //addition of other components to the newly created panel here
            jpanelCases.add(jp);
}

Ответы [ 3 ]

0 голосов
/ 25 июня 2011

А как насчет использования JScrollPane на JPanel?Это будет содержать элементы внутри панели без превышения ее физических границ.В противном случае, если вам не нравится идея прокрутки, я предлагаю вам каким-то образом отслеживать общую сумму ширины элементов, добавленных на панель по отношению к физической ширине панели, и прекратить добавлять элементы, когда следующая ширина элемента добавляется к сумме.превышает ширину панели.

Надеюсь, это поможет!

0 голосов
/ 25 июня 2011

однако они выходят за пределы формы (и даже экрана) по горизонтали.

Итак, что вы хотите сделать в этом случае:

a) просто игнорируйте компоненты и не добавляйте их в кадр б) отобразите компоненты в новой строке

Если ответ «b», попробуйте WrapLayout .

0 голосов
/ 25 июня 2011

Попробуйте поставить 2 клея, один сначала один, наконец:

jpanelCases.setLayout(new BoxLayout(this.jpanelCases, BoxLayout.X_AXIS));

jpanelCases.add(Box.createHorizontalGlue());

db = Database.getInstance();
List<Category> cats = db.getCategories();
for(Category c : cats){
            JPanel jp = new JPanel();
            //addition of other components to the newly created panel here
            jpanelCases.add(jp);
}

jpanelCases.add(Box.createHorizontalGlue());
...