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);
}
}

浙公网安备 33010602011771号