Ниже приведен простой пример, используемый для получения понимания очень неуловимого вопроса, связанного с панелями, своего рода панелями.
Хотя этот пример помог, он также вызвал ряд вопросов.
import javax.swing.event.*;
import java.awt.*;
import javax.swing.*;
class HorizontalSplit extends JFrame {
static JFrame f;
static JLabel l1, l2, l3, l4;
// main class
public static void main(String[] args)
{
f = new JFrame("frame");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
l1 = new JLabel("add()" );
l1.setForeground(Color.RED);
l2 = new JLabel("getContentPane().add()");
l2.setForeground(Color.BLUE);
l3 = new JLabel("Layered Pane");
l3.setForeground(Color.MAGENTA);
l4 = new JLabel("Glass Pane");
l4.setForeground(Color.YELLOW);
//Both work and are the same
f.setLayout(new FlowLayout());
f.add(l1);
f.getContentPane().add(l2);
//Using Layered Pane - works
f.getLayeredPane().setVisible(true);
f.getLayeredPane().setLayout(new FlowLayout());
f.getLayeredPane().add(l3);
//Using Glass Pane - works
f.getGlassPane().setVisible(true);
((JPanel)(f.getGlassPane())).setLayout(new FlowLayout());
((JPanel)f.getGlassPane()).add(l4);
// set the size of frame
f.setSize(300, 300);
f.show();
}
}
Вопрос 1: Верно ли рассмотреть вызов f.add (l1) == f.getContentPane (). Add (l1), означающий, что они будут делать по сути то же самоевещь?
Вопрос 2: Используя этот код:
f.setLayout(new FlowLayout());
f.add(l1);
f.getContentPane().add(l2);
Создает этот вывод:
![enter image description here](https://i.stack.imgur.com/PPWBP.png)
Используя этот код:
//f.setLayout(new FlowLayout());
f.add(l1);
f.getContentPane().add(l2);
Создает этот вывод:
![enter image description here](https://i.stack.imgur.com/H90VD.png)
Если менеджер по умолчанию для макетаОкно является BorderLayout, почему не появился "add ()"? (Он должен был появиться в центре / слева от окна)
Вопрос 3:
Приведут ли следующие 2 вызова к одному и тому же результату?
f.setLayout(new FlowLayout());
f.getContentPane().add(new FlowLayout());
Или первый вызов устанавливает менеджер раскладки на Frame, а второй вызов устанавливает менеджер раскладки на Panel?
Вопрос 4: Почему для Layered Pane почемувывод, кажется, включен с первой панелью? Так как в Layered Pane есть собственный менеджер компоновки, должен ли этот вывод отображаться поверх другого вида вывода, например, как вывод выполняется для стеклянной панели?
f.getLayeredPane().setLayout(new FlowLayout());
f.getLayeredPane().add(l3);
Вопрос 5: Стеклянная панель - единственная, для которой необходимо установить значение true. Является ли это единственной панелью, для которой по умолчанию установлено значение «Ложь»?
Вопрос 6: Почему стеклянная панель является единственным объектом, который необходимо было привести к JPanel, чтобы установитьlayout и add () и object.
f.getGlassPane().setVisible(true);
((JPanel)(f.getGlassPane())).setLayout(new FlowLayout());
((JPanel)f.getGlassPane()).add(l4);
Проходя через отладчик в Eclipse, он показывает стеклянную панель в виде JPanel. ![enter image description here](https://i.stack.imgur.com/hlbzm.png)
Надеюсь, что приведенные выше вопросы могут дать объяснение, так как я чувствую, что довольно близок к пониманию этой очень неуловимой концепции.