Использование JFrame или JPanel
Я собираюсь начать разработку нового приложения. Он будет содержать около 10 различных GUIs.
используя Netbeans, я могу создать либо JFrame, либо JPanel - но какой из них я должен использовать?
У меня будет графический интерфейс меню, который будет содержать кнопки для оставшихся GUIs. Мне также придется передать некоторые контроллеры в качестве параметров
6 ответов
Я предполагаю, что вы немного смущены различиями между JPanel и JFrame. JPanel действует как контейнер для хранения других компонентов GUI, таких как кнопки, текстовые поля и другие JPanels.
С другой стороны, вы можете считать JFrame компонентом верхнего уровня (основной JPanel).
цитаты и изображения, взятые из этой сайт и сайт.
JFrame
рамы окно верхнего уровня с заголовком и рамкой.
следующее изображение типичного JFrame:
JPanel
на
JPanel
класс предоставляет универсальные контейнеры для легких компонентов.
ниже приведено изображение JPanels. Каждый цвет представляет собой другой JPanel
:
поэтому, чтобы ответить на ваш вопрос, вам нужно использовать оба. Начните с JFrame (который действует как основной контейнер) и добавьте JPanels для создания графического пользовательского интерфейса.
Я рекомендую вам прочитать эти две ссылки, чтобы получить лучшее представление и увидеть код.
10 различных GUIs
существует множество вариантов отображения JPanel
на основе элементов GUI.
CardLayout
JTabbedPane
- вложенный макет..
посмотреть использование нескольких JFrames, Хороший/плохой практикой? для многих других идей об объединении или отображении различных групп виджетов.
Б. Н. сопротивление продления либо JFrame
или JPanel
- вместо того, чтобы просто хранить ссылку на один, и использовать его по мере необходимости.
этой статьи Кажется информативным:
резюме:
JPanel служит контейнером общего назначения, в то время как JFrame-это окно, обычно используемое для автономных приложений, таких как окно предупреждения или окно уведомления.
JPanel представляет область, используемую для более сложных операций или приложений.
в 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.
вы всегда можете поместить панель в рамку. Вы не можете поместить рамку в панель.