Форум на Kuban.ru (http://forums.kuban.ru/)
-   Разработка программ (http://forums.kuban.ru/f1024/)
-   -   Вопрос по Java (http://forums.kuban.ru/f1024/vopros_po_java-2962765.html)

coder73 21.08.2012 10:09

Вопрос по Java
 
На основной форме есть JPanel2.В нее спомощью метода add добавляется frm1 на которой находятся несколько JButton. Когда начинаешь изменять мышкой размеры JPanel2,то JButton остаются прижатыми влево, а должны следовать за нижним краем JPanel2 и одновременно перемещаться к правому краю формы.Вот код.Разработка ведется на NetBeans 7.2 и при тестировании формы frm1 в визуальном редакторе форм JButton перемещаются правильно.В чем проблема?

jPanel2.setLayout(new FlowLayout(FlowLayout.LEFT));
Form1 frm1 = new Form1();
jPanel2.add(frm1);

Sserj 21.08.2012 11:07

Ну тут тебе надо использовать несколько манагеров, сначала использовать BorderLayout (он по умолчанию) и новую панель добавлять в него на юг, а в этой новой панели уже использовать FlowLayout и выравниваем по правому краю. Тобишь примерно так:

JFrame myFrame = new JFrame();
myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
myFrame.setSize(200, 90);
JPanel myPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
myPanel.add(new JButton("Test"));
myFrame.add(myPanel, BorderLayout.SOUTH);
myFrame.setVisible(true);

coder73 22.08.2012 18:15

Спасибо за пример,но он несколько не в тему.Наверное я не совсем корректно описал проблему. Мне надо одну панель вставить в другую и при этом JButton должны следовать за нижним краем JPanel2 и одновременно перемещаться к правому краю формы.

Sserj 23.08.2012 03:43

2-coder73 > Может быть действительно что-то недоговариваешь...
На первой панели ставишь манагер BorderLayout, вторую панель добавляешь в первую в нижний край (у бордера она называется SOUTH), и при изменении вторая панель всегда будет нижнюю часть занимать, а во второй панели уже FlowLayout с выравниванием по нужному краю ,кстати в вопросе говоришь "к правому краю", а в топике используешь FlowLayout.LEFT, это понятно по левому выравнивание, вот тот же пример применительно к панелям:

JPanel jpanFirst = new JPanel(new BorderLayout());
JPanel jpanSecond = new JPanel(new FlowLayout(FlowLayout.RIGHT));
jpanSecond.add(new JButton("Test"));
jpanFirst.add(jpanSecond, BorderLayout.SOUTH);

Однозначно будет по нижнему краю и прижиматься вправо.
Хотя может что-то я в вопросе и не понимаю

Sserj 23.08.2012 03:48

3-Sserj > Или вполне вероятно если тебе надо именно в jpanSecond задать такое поведение то просто jpanSecond можно сделать из двух панелей, jpanSecond с BorderLayout и и вложить третью в нее с FlowLayout, типа такого:

JPanel jpanFirst = new JPanel();
JPanel jpanSecond = new JPanel(new BorderLayout());
JPanel jpanThird = new JPanel(new FlowLayout(FlowLayout.RIGHT));
jpanThird.add(new JButton("Test"));
jpanSecond.add(jpanThird, BorderLayout.SOUTH);
jpanFirst.add(jpanSecond);

Вообщем формы на свинге обычно очень слоёные бутрброды получаются, хотя при достаточной сноровке тырфейс можно нарисовать любой :)

Sserj 23.08.2012 04:24

4-Sserj > Ну или разобраться со SpringLayout - ом и использовать его, с ним можно сделать вообще что угодно, но меня он просто как то напрягает.

coder73 23.08.2012 16:07

Спасибо за примеры,сейчас разбираюсь с визуальным дизайнером NetBeans.Я с Java, только начал разбираться.Раньше писал на C++,C#. Скажи Sserj,а какие бесплатные генераторы отчетов можно использовать в Java?

Sserj 24.08.2012 05:03

6-coder73 > Про отчеты не могу много сказать, у меня специализация другая, но напарник подсказал что для нетбинса лучше пользовать JasperReports. Секундный поиск выдал:
[url]http://ru.wikipedia.org/wiki/JasperReports[/url]

А может и не лучше, может это просто единственное что он знает, так как других тоже не назвал :)

coder73 24.08.2012 20:48

Спасибо Sserj!


Текущее время: 05:52. Часовой пояс GMT +3.