Я просто пытаюсь создать этот маленький симулятор. в графическом интерфейсе у меня есть два основных компонента - карта, занимающая большую часть окна, и панель управления с правой стороны. Теперь я хотел бы добавить ползунок времени в нижней части окна (работающий только под картой, а не под панелью управления). я могу сделать это в классе runner (который инициализирует главное окно), но он должен логически принадлежать панели управления - он запускает все соответствующие события. есть способ сделать это? какие компоненты качелей следует использовать и как их завернуть? (Я пробовал использовать для этого netbeans, но, когда я использовал его впервые, мне не повезло).

Спасибо большое за вашу помощь

1
user143602 23 Июл 2009 в 14:39

3 ответа

Лучший ответ

Вы можете использовать BorderLayout для очень простого достижения желаемого результата; например

JPanel pnl = new JPanel(new BorderLayout());

pnl.add(mapPnl, BorderLayout.CENTER);
pnl.add(controlPnl, BorderLayout.EAST);
pnl.add(timerPnl, BorderLayout.SOUTH);

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

Тот факт, что ваши элементы управления и таймер связаны, не имеет отношения к макету визуальных компонентов. Обычно вы поддерживаете эти отношения на уровне бизнес-объекта; например

Controller controller = new Controller();
JPanel controlPnl = new MyControlPanel(controller);
JPanel timerPnl = new MyTimerPanel(controller.getTimer());
1
Adamski 23 Июл 2009 в 14:47
Почему вы предлагаете кому-нибудь взглянуть на GridBagLayout? Да, он один из самых мощных. Но оборачиваться также больно. Я предпочитаю разбивать элементы на более мелкие панели и использовать более простые менеджеры компоновки, просто для того, чтобы все было в порядке.
 – 
Thomas Owens
23 Июл 2009 в 14:49
@Thomas: Я обычно разбиваю элементы на более мелкие панели, когда это возможно, но считаю GridBagLayout особенно полезным для сложных диалогов. Мы написали несколько статических служебных методов, чтобы наш код оставался кратким и читаемым - я бы сказал, что его освоение стоит кривой обучения.
 – 
Adamski
23 Июл 2009 в 14:55
- GridBagLayout невероятно простой - и очень мощный. Посмотрите на него еще раз, так как это макет, в котором вы можете достичь почти всего, что захотите.
 – 
oxbow_lakes
23 Июл 2009 в 15:36
Спасибо за помощь - где-то в голове я действительно перепутал графический интерфейс и бизнес-логику. p.s. это был первый раз, когда я использовал это место - количество умственных способностей здесь немного пугает, но, безусловно, полезно :)
 – 
user143602
23 Июл 2009 в 17:11

Диспетчер компоновки, например макет MiG или DesignGridLayout поможет вам лучше разместить элементы управления. Расположение элементов управления - это одно, а логическое разделение - другое. Все элементы управления на панели управления с правой стороны и ползунок внизу могут быть членами одной логической единицы.

1
kgiannakakis 23 Июл 2009 в 14:46

Просто используйте несколько панелей для управления разными регионами следующим образом:

JPanel centerContent = new JPanel(new BorderLayout());
centerContent.add(map, BorderLayout.CENTER);
centerContent.add(timeSlider, BorderLayout.SOUTH);

JPanel content = new JPanel(new BorderLayout());
content.add(controlPanel, BorderLayout.WEST);
content.add(centerContent, BorderLayout.CENTER);

Используя этот подход, менеджер компоновки - в данном случае java.awt.BorderLayout - заботится об изменении размера окна, содержащего элементы управления.

0
Nick Holt 23 Июл 2009 в 15:11