Как реализовать страницы в приложении Java Swing.?

У меня есть некоторый опыт создания приложений на Java, и я хотел бы узнать больше, поэтому решил создать приложение с разными страницами. Например, начальный фрейм покажет меню кнопок, которые будут вести к разным фреймам, показывая разные компоненты и макеты.

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

Я знаю CardLayout, однако для этой программы я пытаюсь изучить MigLayout; так что это будет невозможно (насколько мне известно). Надеюсь, этот вопрос не слишком расплывчатый, я просто хотел бы знать, как лучше всего создавать приложения на Java с разными страницами.

1) Да, вы можете использовать CardLayout. Панель с CardLayout является «родительской» панелью. Затем у вас есть дочерние панели, которые вы добавляете в CardLayout. Эти панели могут использовать любой менеджер макетов, который они хотят. 2) Не используйте несколько кадров. Если вам нужны отдельные окна, вы должны использовать JDialog в качестве дочернего окна.

camickr 23.11.2018 23:04

Есть несколько способов сделать это. CardLayout - это, безусловно, вариант, но он не всегда подходит для каждой ситуации (никогда не подходит). Иногда вам нужно «развернуть собственное» решение, которое может использовать модель и контроллер для управления коллекцией представлений. Это было бы более динамично по своей природе, но потребовало бы дополнительных усилий с вашей стороны, чтобы заставить его работать.

MadProgrammer 24.11.2018 00:11
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
389
2

Ответы 2

Можно использовать панели с вкладками, это лучший вариант для хранения страниц.

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(); 
} 
}

Другие вопросы по теме