У меня есть некоторый опыт создания приложений на Java, и я хотел бы узнать больше, поэтому решил создать приложение с разными страницами. Например, начальный фрейм покажет меню кнопок, которые будут вести к разным фреймам, показывая разные компоненты и макеты.
Я не уверен, что лучше всего реализовать страницы. Я думаю, что я мог бы сохранить окна JFrame в списке, а затем использовать класс обработчика кнопок, чтобы, возможно, изменить видимость различных кадров, позволяя только соответствующему кадру быть видимым, когда пользователь нажимает кнопку. Я думаю, что этот метод может сработать, но есть ли более эффективный / практичный способ сделать это?
Я знаю CardLayout, однако для этой программы я пытаюсь изучить MigLayout; так что это будет невозможно (насколько мне известно). Надеюсь, этот вопрос не слишком расплывчатый, я просто хотел бы знать, как лучше всего создавать приложения на Java с разными страницами.
Есть несколько способов сделать это. CardLayout - это, безусловно, вариант, но он не всегда подходит для каждой ситуации (никогда не подходит). Иногда вам нужно «развернуть собственное» решение, которое может использовать модель и контроллер для управления коллекцией представлений. Это было бы более динамично по своей природе, но потребовало бы дополнительных усилий с вашей стороны, чтобы заставить его работать.




Можно использовать панели с вкладками, это лучший вариант для хранения страниц.
https://docs.oracle.com/javase/tutorial/uiswing/components/tabbedpane.html
Также я заметил, что вам нужно правильно рассматривать контейнеры верхнего уровня, потому что вам не нужно каждый раз создавать JFrame для каждой страницы, по крайней мере, если это было необходимо (например: редактор, создайте новое окно, поэтому вам нужно создайте новый JFrame, в вашем случае я так не думаю), поэтому, пожалуйста, рассмотрите ссылку ниже.
https://docs.oracle.com/javase/tutorial/uiswing/components/toplevel.html
JInternalFrame является частью Java Swing. JInternalFrame - это контейнер, который предоставляет множество функций фрейма, включая отображение заголовка, открытие, закрытие, изменение размера, поддержку строки меню и т. д. Пример внутреннего каркаса с компонентами
Код для создания нескольких внутренних фреймов:
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
class solution extends JFrame {
// frame
static JFrame f;
// label to diaplay text
static JLabel l, l1;
// main class
public static void main(String[] args) {
// create a new frame
f = new JFrame("frame");
// set layout of frame
f.setLayout(new FlowLayout());
// create a internal frame
JInternalFrame in = new JInternalFrame("frame 1", true, true, true, true);
// create a internal frame
JInternalFrame in1 = new JInternalFrame("frame 2", true, true, true, true);
// create a Button
JButton b = new JButton("button");
JButton b1 = new JButton("button1");
// create a label to display text
l = new JLabel("This is a JInternal Frame no 1 ");
l1 = new JLabel("This is a JInternal Frame no 2 ");
// create a panel
JPanel p = new JPanel();
JPanel p1 = new JPanel();
// add label and button to panel
p.add(l);
p.add(b);
p1.add(l1);
p1.add(b1);
// set visibility internal frame
in.setVisible(true);
in1.setVisible(true);
// add panel to internal frame
in.add(p);
in1.add(p1);
// add internal frame to frame
f.add(in);
f.add(in1);
// set the size of frame
f.setSize(300, 300);
f.show();
}
}
1) Да, вы можете использовать CardLayout. Панель с CardLayout является «родительской» панелью. Затем у вас есть дочерние панели, которые вы добавляете в CardLayout. Эти панели могут использовать любой менеджер макетов, который они хотят. 2) Не используйте несколько кадров. Если вам нужны отдельные окна, вы должны использовать JDialog в качестве дочернего окна.