Java - Swing - Layout

布局组件

  • 容器: 可以去加载其他组件的组件
    • 顶级容器: 自成一个窗口 - JFrame Frame Window
    • 面板容器: JPanel 面板 加载到窗体上
      • JFrame: 默认边框布局 BorderLayout
      • JPanel: 默认流式布局 FlowLayout
  • 组件:
    • 功能类型的组件: 按钮 输入框 选择框 菜单 滑杆 选项卡 文件选择器 颜色选择器

边框布局 BorderLayout :

  • 方位布局 : 东西 南北 中 五个方位,每个方位只能加一个组件
    • 其中 南北不能设置宽度(宽度是父容器的宽度)
    • 东西不能设置高度(父容器的高度减去南北的高)
    • 其他方位剩下的区域 中央都不可以设置

监听:

  • 加给窗体对象
  • 指定一块面板来绘制 考虑把监听加给面板对象
  • 画图: 获取画笔也需要丛面板对象上获取

菜单:

菜单栏 ( 菜单 (菜单项(动作监听器 )))

// 菜单栏  菜单   菜单项
    JMenuBar jMenuBar = new JMenuBar ();
    JMenu menu1 = new JMenu ("File");
    JMenu menu2 = new JMenu ("Edit");
    JMenu menu3 = new JMenu ("Window");
    // 菜单添加菜单项
    for(int i = 0; i < strs.length; i++){
      JMenuItem jMenuItem = new JMenuItem (strs[i]);
      jMenuItem.addActionListener (dl);
      menu1.add (jMenuItem);
    }
    // 菜单添加菜单
    menu1.add (menu2);

    // 添加菜单 
    jMenuBar.add (menu1);
//        jMenuBar.add (menu2);
    jMenuBar.add (menu3);

    // 设置菜单到窗体上
    jf.setJMenuBar (jMenuBar);
package com.ui.layoutUI;

import javax.swing.*;
import java.awt.*;

/**
 * 布局管理
 * - 流式布局 自动布局 依次摆放
 * - 边框布局 网格布局 卡片布局 依赖布局 空布局
 */
public class LayoutUI{
  public static void main(String[] args){
    new LayoutUI ().initUI ();
  }

  String[] strs = {"3D立方体", "直线", "矩形", "圆", "三角形", "多边形", "实心矩形", "实心圆", "橡皮擦", "铅笔"};
  DrawListener dl = new DrawListener ();

  public void initUI(){

    JFrame jf = new JFrame ();
    jf.setTitle ("布局");
    jf.setSize (800, 800);
    jf.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);

    // 一个界面上不一定必须需要五个方位 可以只设置几个
    JPanel jp_n = new JPanel ();
    JPanel jp_s = new JPanel ();
    JPanel jp_c = new JPanel ();
    JPanel jp_w = new JPanel ();
    JPanel jp_e = new JPanel ();

    // 设置背景色
    jp_n.setBackground (Color.RED);
    jp_s.setBackground (Color.WHITE);
    jp_c.setBackground (Color.GRAY);
    jp_w.setBackground (Color.CYAN);
    jp_e.setBackground (Color.BLUE);

    // 设置尺寸
    Dimension dim = new Dimension (200, 200);
    jp_n.setPreferredSize (dim);
    jp_s.setPreferredSize (dim);
    jp_w.setPreferredSize (dim);
    jp_e.setPreferredSize (dim);

    // 指定方位 添加面板
//        jf.add (jp_n,BorderLayout.NORTH);
    jf.add (jp_s, BorderLayout.SOUTH);
    jf.add (jp_c, BorderLayout.CENTER);
//        jf.add (jp_w,BorderLayout.WEST);
//        jf.add (jp_e,BorderLayout.EAST);

    // 遍历添加按钮
    for(int i = 0; i < strs.length; i++){
      JButton btn = new JButton (strs[i]);
      btn.addActionListener (dl);
      jp_s.add (btn);
    }

    // 菜单栏  菜单   菜单项
    JMenuBar jMenuBar = new JMenuBar ();
    JMenu menu1 = new JMenu ("File");
    JMenu menu2 = new JMenu ("Edit");
    JMenu menu3 = new JMenu ("Window");
    // 菜单添加菜单项
    for(int i = 0; i < strs.length; i++){
      JMenuItem jMenuItem = new JMenuItem (strs[i]);
      jMenuItem.addActionListener (dl);
      menu1.add (jMenuItem);
    }
    // 菜单添加菜单
    menu1.add (menu2);

    // 添加菜单 
    jMenuBar.add (menu1);
//        jMenuBar.add (menu2);
    jMenuBar.add (menu3);

    // 设置菜单到窗体上
    jf.setJMenuBar (jMenuBar);

    jf.setVisible (true);

    // 画笔以及鼠标监听 同步都加给面板
    Graphics g = jp_c.getGraphics ();
    dl.g = g;
    jp_c.addMouseListener (dl);


  }
}



posted @ 2022-01-07 16:04  30%privatetoobject  阅读(18)  评论(0)    收藏  举报