Я просто пытаюсь создать этот маленький симулятор. в графическом интерфейсе у меня есть два основных компонента - карта, занимающая большую часть окна, и панель управления с правой стороны. Теперь я хотел бы добавить ползунок времени в нижней части окна (работающий только под картой, а не под панелью управления). я могу сделать это в классе runner (который инициализирует главное окно), но он должен логически принадлежать панели управления - он запускает все соответствующие события. есть способ сделать это? какие компоненты качелей следует использовать и как их завернуть? (Я пробовал использовать для этого netbeans, но, когда я использовал его впервые, мне не повезло).
Спасибо большое за вашу помощь
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());
Диспетчер компоновки, например макет MiG или DesignGridLayout поможет вам лучше разместить элементы управления. Расположение элементов управления - это одно, а логическое разделение - другое. Все элементы управления на панели управления с правой стороны и ползунок внизу могут быть членами одной логической единицы.
Просто используйте несколько панелей для управления разными регионами следующим образом:
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
- заботится об изменении размера окна, содержащего элементы управления.
Похожие вопросы
Новые вопросы
java
Java - это язык программирования высокого уровня. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег редко используется отдельно и чаще всего используется вместе с [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] и [maven].
GridBagLayout
невероятно простой - и очень мощный. Посмотрите на него еще раз, так как это макет, в котором вы можете достичь почти всего, что захотите.