Использование нескольких JFrames: хорошая или плохая практика? [закрыто]
Проблема с использованием нескольких JFrame в приложении на Java
Я разрабатываю приложение, которое отображает изображения и воспроизводит звуки из базы данных. В процессе разработки мне нужно решить, стоит ли использовать отдельный JFrame для добавления изображений в базу данных из графического интерфейса (GUI).
Сейчас я задаюсь вопросом: является ли хорошей практикой использование нескольких окон JFrame в одном приложении?
Буду признателен за мнение сообщества: какие плюсы и минусы есть у такого подхода? Есть ли у кого-то опыт работы с несколькими окнами, и как это сказывается на пользовательском опыте и управлении приложением?
5 ответ(ов)
Чтобы сделать JInternalFrame частью главного окна (JFrame) и сделать его невидимым, можно использовать следующий подход. Сначала добавьте JInternalFrame в основной фрейм, затем установите его видимость в false, чтобы он не отображался, но при этом оставался доступным для обработки событий. Вот пример кода для выполнения этой задачи:
JInternalFrame jInternalFrame = new JInternalFrame("My Internal Frame");
jInternalFrame.setSize(300, 150);
// Добавляем InternalFrame в главный фрейм
mainFrame.add(jInternalFrame);
// Делаем InternalFrame невидимым
jInternalFrame.setVisible(false);
Таким образом, вы можете использовать jInternalFrame для дальнейших событий и взаимодействий, несмотря на то, что он не отображается на экране.
Это уже некоторое время назад, как я работал со Swing, но в целом считать использование нескольких JFrame плохой практикой. Вот некоторые основные недостатки, которые приходят на ум:
- Это более затратно: вам потребуется выделить значительно больше ресурсов для отрисовки JFrame по сравнению с другими контейнерами, такими как Dialog или JInternalFrame.
- Непросто в использовании: Навигация по множеству связанных между собой JFrame может быть затруднена; это создаёт впечатление, что ваше приложение представляет собой набор несогласованных и плохо спроектированных приложений.
- Использовать JInternalFrame проще: Это скорее риторический вопрос, но сейчас это гораздо проще, и другие более умные люди (или обладающие большим количеством свободного времени) уже продумали использование шаблона Desktop и JInternalFrame, поэтому я бы рекомендовал использовать именно его.
Определенно, это плохая практика. Одна из причин заключается в том, что это не очень «удобно для пользователя»: каждый JFrame создает новую иконку в панели задач. Управлять несколькими JFrame будет крайне сложно и утомительно.
Лично я бы использовал ОДИН JFrame для вашего типа приложения. Способы отображения множества компонентов зависят от вас, и их существует много: Canvas, JInternalFrame, CardLayout, возможно, даже JPanel.
Несколько объектов JFrame = Боль, проблемы и неприятности.
Я думаю, что использование нескольких JFrame не является хорошей идеей.
Вместо этого мы можем использовать несколько JPanel в одном и том же JFrame.
Также мы можем переключаться между этими JPanel, что позволяет нам отображать больше одного элемента в JFrame одновременно.
Для каждого JPanel мы можем разработать различные элементы, и все эти JPanel могут отображаться на одном JFrame, но по одному в одно время.
Чтобы переключаться между этими JPanel, можно использовать JMenuBar с JMenuItems для каждого JPanel, либо JButton для каждой JPanel.
Более одного JFrame не является хорошей практикой, но в принципе нет ничего плохого в том, чтобы использовать несколько JFrame, если это необходимо.
Тем не менее, лучше адаптировать один JFrame под разные потребности, чем иметь множество JFrame.
Если размеры фреймов будут одинаковыми, почему бы не создать один фрейм и передавать его как ссылку?
Создав фрейм и передав его, вы сможете самостоятельно решать, как его заполнять. Это похоже на ситуацию с методом, который вычисляет среднее значение набора данных. Зачем создавать этот метод снова и снова?
Передавая ссылку на общий фрейм, вы сокращаете количество повторяющегося кода и облегчаете его сопровождение. Это также улучшает производительность, поскольку не требуется выделение памяти для каждого нового фрейма. Если требования к заполнению фрейма меняются, вы можете спокойно изменять логику, не затрагивая создание самого фрейма.
Как создать "современное" настольное Java-приложение? [закрыто]
Что делает SwingUtilities.invokeLater?
SwingUtilities.invokeLater: Вызов кода в потоке событий Swing
Что значит 'synchronized'?
Как объявить массив в одну строку?