Можно ли размещать компоненты случайным образом без контейнера в конструкторе окон Swing?

Насколько я знаю, единственный способ разместить JButton или JLabel — это создать структуру GUI через контейнеры и разместить на ней эти компоненты.

Существуют ли другие методы случайного добавления компонентов в кадр и соответствующего изменения размера, как, например, в Visual C#? Как это сделать?


person Nipun Alahakoon    schedule 29.11.2015    source источник
comment
Are there other methods to add components randomly into the frame and resize accordingly - В этом смысл использования менеджеров компоновки. Менеджеры компоновки автоматически изменяют размер компонентов при изменении размера фрейма. Вы можете использовать вложенные менеджеры компоновки, чтобы получить желаемую компоновку. Прочтите руководство по Swig в менеджерах макетов для получения дополнительной информации и работы Примеры.   -  person camickr    schedule 29.11.2015
comment
Для примера и < href="http://stackoverflow.com/questions/21247833/how-to-prevent-jlabel-positions-from-resetting/21248274#21248274">пример   -  person MadProgrammer    schedule 29.11.2015
comment
да, я могу вкладывать макеты. Мне просто интересно, как использовать компоненты без контейнеров на простой рамке. хотя спасибо за комментарии :)   -  person Nipun Alahakoon    schedule 30.11.2015


Ответы (1)


Да.
Вы можете использовать макет null, а затем размещать компоненты с помощью setBounds().
Например:

JPanel panel = new JPanel(null);
for (int i = 0; i < 4; i++) {
    JButton b = new JButton("JButton-"+i);
    b.setBounds(50+i*10, 50+i*10, 100, 100);
    panel.add(b);
}

Если вы хотите случайное размещение, вы можете рандомизировать первые 2 значения (x, y).
Вам нужно будет предоставить собственные действительные значения, которые будут помещены в родительский контейнер.

person Leet-Falcon    schedule 29.11.2015
comment
Не используйте нулевой макет. Размер компонентов НЕ будет изменяться автоматически, это работа менеджера компоновки. Swing был разработан для использования с менеджерами компоновки. - person camickr; 29.11.2015
comment
Это правда, использование нулевого макета не рекомендуется, но это один из возможных ответов на ОП. - person Leet-Falcon; 29.11.2015
comment
Да, Swing — это не Visual C#, поэтому мы должны поощрять людей использовать Swing так, как он был разработан, что означает использование менеджеров компоновки. Не пытайтесь заставить язык быть похожим на другой язык. Если вам так нравится другой язык, используйте другой язык. - person camickr; 29.11.2015
comment
Я взял C# просто для примера. я просто хотел свободно обращаться с элементами управления. в противном случае это больше GUI Restricted, и иногда нам приходится отказываться от некоторых функций из-за этого. - person Nipun Alahakoon; 30.11.2015