Понимание схемы AWT - PullRequest
       45

Понимание схемы AWT

0 голосов
/ 13 марта 2019

Я пытаюсь получить окна с двумя панелями, одна панель справа (красная) шириной 100 пикселей, а другая занимает место для восстановления (СИНИЙ).

Дополнительно есть 4панели, которые должны занимать минимальное пространство, чтобы справиться с шириной и высотой декорасправа и СИНИЙ остаток окна.

Output

Это то, что я пробовал:

import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Insets;
import java.awt.Panel;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

// -------------------------------
//             marginTop
// -------------------------------
// | |                 |       | |
// | |                 |   s   | |
// |m|                 |   u   |m|
// |a|                 |   b   |a|
// |r|                 |   P   |r|
// |g|                 |   a   |g|
// |i| subPanelCenter  |   n   |i|
// |n|                 |   e   |n|
// |L|                 |   l   |R|
// |e|                 |   R   |i|
// |f|                 |   i   |g|
// |t|                 |   g   |h|
// | |                 |   h   |t|
// | |                 |   t   | |
// | |\_______________________/| |
// | |       panelCenter       | |
// -------------------------------
//           marginBottom
// -------------------------------
public class Test3 extends Frame {

    Insets windowInsets;

    // Main Panels
    Panel panelCenter = new Panel();
    Panel subPanelCenter = new Panel();
    Panel subPanelRight = new Panel();

    // Margin Panels
    Panel marginTop = new Panel();
    Panel marginBottom = new Panel();
    Panel marginLeft = new Panel();
    Panel marginRight = new Panel();


    public Test3() {

        setSize(660,540);
        setUndecorated(false);

        setVisible(true);

        windowInsets = getInsets();

        marginTop.setBackground(Color.PINK);
        marginRight.setBackground(Color.GREEN);
        marginLeft.setBackground(Color.BLACK);
        marginBottom.setBackground(Color.YELLOW);

        subPanelCenter.setBackground(Color.BLUE);
        subPanelRight.setBackground(Color.RED);

        panelCenter.setLayout(new FlowLayout());
        panelCenter.add(subPanelCenter);
        panelCenter.add(subPanelRight);

        // Add Panels
        add("North", marginTop);
        add("South", marginBottom);
        add("West", marginLeft);
        add("East", marginRight);
        add("Center", panelCenter);

        // Resize Panels
        layoutResize();

        // Close Button Listener
        addWindowListener(new WindowAdapter(){  
            public void windowClosing(WindowEvent e) {  
                dispose();  
            }  
        });  



    }

    public void layoutResize() {

            subPanelRight.setPreferredSize( new Dimension(100, getSize().height));

            marginTop.setPreferredSize( new Dimension(getSize().width, windowInsets.top) );
            marginBottom.setPreferredSize( new Dimension(getSize().width, windowInsets.bottom) );
            marginLeft.setPreferredSize( new Dimension(windowInsets.left, getSize().height) );
            marginRight.setPreferredSize( new Dimension(windowInsets.right, getSize().height) );


    }

    public static void main( String[] args ) {
            Test3 window = new Test3();
    }

}
...