Java: уточняющие вопросы, связанные с панелью содержимого - PullRequest
0 голосов
/ 02 ноября 2019

Ниже приведен простой пример, используемый для получения понимания очень неуловимого вопроса, связанного с панелями, своего рода панелями.

Хотя этот пример помог, он также вызвал ряд вопросов.

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

Используя этот код:

        //f.setLayout(new FlowLayout()); 
        f.add(l1);
        f.getContentPane().add(l2);

Создает этот вывод:

enter image description here

Если менеджер по умолчанию для макетаОкно является 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

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

...