Использование JFrame или JPanel

Я собираюсь начать разработку нового приложения. Он будет содержать около 10 различных GUIs.

используя Netbeans, я могу создать либо JFrame, либо JPanel - но какой из них я должен использовать?

У меня будет графический интерфейс меню, который будет содержать кнопки для оставшихся GUIs. Мне также придется передать некоторые контроллеры в качестве параметров

6 ответов


Я предполагаю, что вы немного смущены различиями между JPanel и JFrame. JPanel действует как контейнер для хранения других компонентов GUI, таких как кнопки, текстовые поля и другие JPanels.

С другой стороны, вы можете считать JFrame компонентом верхнего уровня (основной JPanel).

цитаты и изображения, взятые из этой сайт и сайт.

JFrame

рамы окно верхнего уровня с заголовком и рамкой.

следующее изображение типичного JFrame:

Typical JFrame

JPanel

на JPanel класс предоставляет универсальные контейнеры для легких компонентов.

ниже приведено изображение JPanels. Каждый цвет представляет собой другой JPanel

enter image description here:

поэтому, чтобы ответить на ваш вопрос, вам нужно использовать оба. Начните с JFrame (который действует как основной контейнер) и добавьте JPanels для создания графического пользовательского интерфейса.

Я рекомендую вам прочитать эти две ссылки, чтобы получить лучшее представление и увидеть код.


10 различных GUIs

существует множество вариантов отображения JPanel на основе элементов GUI.

посмотреть использование нескольких JFrames, Хороший/плохой практикой? для многих других идей об объединении или отображении различных групп виджетов.

Б. Н. сопротивление продления либо JFrame или JPanel - вместо того, чтобы просто хранить ссылку на один, и использовать его по мере необходимости.


этой статьи Кажется информативным:

резюме:

  1. JPanel служит контейнером общего назначения, в то время как JFrame-это окно, обычно используемое для автономных приложений, таких как окно предупреждения или окно уведомления.

  2. JPanel представляет область, используемую для более сложных операций или приложений.

  3. в JPanel, одна панель может держать много деятельностей, пока в JFrame, она может имейте внутренние рамки для другой цели.


Это читать как JFrame может быть более гибким, чем JPanel для окна верхнего уровня. Как отметил @ncmathsadist, JPanel также может быть встроен в JFrame.


JFrame является компонентом верхнего уровня. Это "кожа" для вашего применения. JPanels не являются контейнерами верхнего уровня. Они должны находиться внутри другого контейнера верхнего уровня. JPanels можно добавить в панель содержимого JFrame.

Я обращусь к вашему вопросу с небольшим образцом кода.

import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.Graphics;
import java.awt.Color;
import java.awt.GridLayout;

public class Example extends JFrame implements Runnable
{
    JPanel left; 
    JPanel right;
    public Example()
    {
        super("Two JPanels in here");
        left = new JPanel(){
            public void paintComponent(Graphics g)
            {
                g.setColor(Color.red);
                g.fillRect(0,0,getWidth(), getHeight());
            }
        };
        right = new JPanel(){
            public void paintComponent(Graphics g)
            {
                g.setColor(Color.blue);
                g.fillRect(0,0,getWidth(), getHeight());
            }
        };

    }
    public void run()
    {
        setSize(500,500);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        getContentPane().setLayout(new GridLayout(1,2));
        getContentPane().add(left);
        getContentPane().add(right);
        setVisible(true);
    }
    public static void main(String[] args)
    {
        Example e = new Example();
        javax.swing.SwingUtilities.invokeLater(e);
    }

}

обратите внимание, как панели внутри панели содержимого.


некоторые из этих ответов WAAAAAY слишком подробно.

просто используйте JPanel.

вы всегда можете поместить панель в рамку. Вы не можете поместить рамку в панель.