一、常用布局
- 边界布局(BorderLayout)
- 网格布局(GridLayout)
- 流式布局(FlowLayout)
- 绝对布局(null)
边界布局(BorderLayout)
按方位分为 5 个区域(东、西、南、北、中),每个区域放置一个组件。
JPanel panel = new JPanel(new BorderLayout());
网格布局(GridLayout)
它以矩形网格形式对容器的组件进行布置,把容器按行列分成大小相等的矩形网格,一个网格中放置一个组件,组件宽高自动撑满网格。
GridLayout的常用构造方法
- 默认构造, 每个组件占据一行一列
JPanel panel = new JPanel(new GridLayout());
- 指定 行数 和 列数 的网格布局
JPanel panel = new JPanel(new GridLayout(int rows, int cols));
- 指定行数和列数的网格布局, 并指定水平和竖直网格间隙
JPanel panel = new JPanel(new GridLayout(int rows, int cols, int hgap, int vgap));
流式布局(FlowLayout)
流式布局管理器。按水平方向依次排列放置组件,排满一行,换下一行继续排列。
同一行(水平方向)的组件的对齐方式由 FlowLayout 的align属性确定,它可能的值如下:
- FlowLayout.LEFT : 左对齐
- FlowLayout.CENTER : 居中对齐(默认)
- FlowLayout.RIGHT : 右对齐
- FlowLayout.LEADING : 与容器方向的开始边对齐,例如,对于从左到右的方向,则与左边对齐
- FlowLayout.TRAILING : 与容器方向的结束边对齐,例如,对于从左到右的方向,则与右边对齐。
FlowLayout的常用构造方法
- 默认 居中对齐的,水平和垂直间隙是 5 个单位
JPanel panel = new JPanel(new FlowLayout());
- 指定对齐方式,默认的水平和垂直间隙是 5 个单位
JPanel panel = new JPanel(new FlowLayout(int align));
- 指定对齐方式,水平和竖直 间隙
JPanel panel = new JPanel(new FlowLayout(int align, int hgap, int vgap));
绝对布局(null)
绝对布局没有特定一个布局管理器类来表示,给容器的布局管理器设置为 null,就表示使用绝对布局,即通过设置组件的坐标和宽高来布置组件。
给组件设置坐标和宽高相的关方法,以Button为例
JPanel panel = new JPanel(null);
JButton button= new JButton("Button"); //设置按钮的坐标 button.setLocation(int x, int y); //设置按钮的宽高 button.setSize(int width, int height); //设置按钮的界限(一次性设置组件的 坐标 和 宽高) button.setBounds(int x, int y, int width, int height);
二、Swing的常用组件
组件的常用方法
// 设置文本的字体类型、样式 和 大小 void setFont(Font font) // 设置字体颜色 void setForeground(Color fg) // 设置组件是否可见 void setVisible(boolean visible) // 设置组件是否为 不透明,JLabel默认为透明,设置为不透明后才能显示背景 void setOpaque(boolean isOpaque) // 设置组件的 首选 大小 void setPreferredSize(Dimension preferredSize) // 设置组件的 最小 大小 void setMinimumSize(Dimension minimumSize) // 设置组件的 最大 大小 void setMaximumSize(Dimension maximumSize)
- JLabel(标签)
- JButton(按钮)
- JTextField(文本框)
- JPasswordField(密码框)
- JTextArea(文本区域)
- JComboBox(下拉列表框)
- JList(列表框)
2.1、JLabel(标签)
标签主要用于展示 文本 或 图片,也可以 同时显示文本和图片。
JLabel 的构造方法:
/* text: 标签显示的 文本 image: 标签显示的 图片 horizontalAlignment: 标签内容(在标签内)的水平对其方式(竖直方向默认居中, 可通过方法设置) /* JLabel label = new JLabel(String text); JLabel label = new JLabel(String text, int horizontalAlignment); JLabel label = new JLabel(Icon image); JLabel label = new JLabel(Icon image, int horizontalAlignment); JLabel label = new JLabel(String text, Icon image, int horizontalAlignment);
JLabel 的常用方法:
// 设置 文本 和 图片 void setText(String text) void setIcon(Icon icon) // 设置文本相对于图片的位置(文本默认在图片右边垂直居中) void setHorizontalTextPosition(int textPosition) void setVerticalTextPosition(int textPosition) // 设置标签内容(在标签内)的对其方式(默认左对齐并垂直居中) void setHorizontalAlignment(int alignment) void setVerticalAlignment(int alignment) // 设置图片和文本之间的间隙 void setIconTextGap(int iconTextGap)
2.2、JButton(按钮)
JButton 常用构造方法:
// 创建不带有设置文本或图标的按钮 JButton button= new JButton(); // 创建一个带文本的按钮 JButton button= new JButton(String text); // 创建一个带图标的按钮 JButton button= new JButton(Icon icon);
JButton 常用方法:
// 设置按钮的 文本、字体 和 字体颜色 void setText(String text) void setFont(Font font) void setForeground(Color fg) // 设置按钮是否可用 void setEnabled(boolean enable) // 设置按钮在 默认、按下、不可用 时显示的图片 void setIcon(Icon defaultIcon) void setPressedIcon(Icon pressedIcon) void setDisabledIcon(Icon disabledIcon)
JButton 常用监听器:
button.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { } });
2.3、JTextField(文本框)
JTextField 用来编辑单行的文本。
JTextField 的常用方法:
// 获取文本框中的文本 String getText() // 设置文本框的 文本、字体 和 字体颜色 void setText(String text) void setFont(Font font) void setForeground(Color fg) // 设置颜色,分别为: 光标颜色、呈现选中部分的背景颜色、选中部分文本的颜色、不可用时文本的颜色 void setCaretColor(Color c) void setSelectionColor(Color c) void setSelectedTextColor(Color c) void setDisabledTextColor(Color c) // 设置文本内容的水平对齐方式 void setHorizontalAlignment(int alignment) // 设置文本框是否可编辑 void setEditable(boolean b)
2.4、JPasswordField(密码框)
JPasswordField 继承自 JTextField,只是显示输入的内容时用特定的字符替换显示(例如 * 或 ●),用法和 JTextField 基本一致。
2.5、JTextArea(文本区域)
JTextArea 用来编辑多行的文本。JTextArea 除了允许多行编辑外,其他基本用法和 JTextField 基本一致。
JTextArea 常用方法:
// 是否自动换行,默认为 false void setLineWrap(boolean wrap) // 设置自动换行方式。如果为 true,则将在单词边界(空白)处换行; 如果为 false,则将在字符边界处换行。默认为 false。 void setWrapStyleWord(boolean word) // 获取文本框中的文本 String getText() // 追加文本到文档末尾 void append(String str) // 替换部分文本 void replaceRange(String str, int start, int end) // 设置文本框的 文本、字体 和 字体颜色 void setText(String text) void setFont(Font font) void setForeground(Color fg) // 获取内容的行数(以换行符计算,满行自动换下一行不算增加行数) int getLineCount() // 获取指定行(行数从0开始)的行尾(包括换行符)在全文中的偏移量 int getLineEndOffset(int line) // 获取指定偏移量所在的行数(行数从0开始) int getLineOfOffset(int offset) // 设置颜色,分别为: 光标颜色、呈现选中部分的背景颜色、选中部分文本的颜色、不可用时文本的颜色 void setCaretColor(Color c) void setSelectionColor(Color c) void setSelectedTextColor(Color c) void setDisabledTextColor(Color c)
三、Graphics 类
Graphics 类相当于一个画布,每个 Swing 组件都通过 Graphics 对象来绘制显示。绘制线段、矩形、椭圆/圆弧/扇形、图片、文本
- 线段 / 折线:
// 绘制一条线段(如果两点为同一点,则绘制点) void drawLine(int x1, int y1, int x2, int y2) // 根据给定的多个点坐标绘制折线 void drawPolyline(int xPoints[], int yPoints[], int nPoints)
- 矩形 :
// 绘制一个矩形(空心) void drawRect(int x, int y, int width, int height) // 填充一个矩形(实心) void fillRect(int x, int y, int width, int height) // 绘制一个圆角矩形 void drawRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight) // 填充一个圆角矩形 void fillRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight) // 绘制一个3D矩形 void draw3DRect(int x, int y, int width, int height, boolean raised) // 填充一个3D矩形 void fill3DRect(int x, int y, int width, int height, boolean raised)
- 圆弧 / 扇形:
// 绘制一个圆弧(弧线) void drawArc(int x, int y, int width, int height, int startAngle, int arcAngle) // 填充一个圆弧(扇形) void fillArc(int x, int y, int width, int height, int startAngle, int arcAngle)
- 椭圆:
// 绘制一个椭圆 void drawOval(int x, int y, int width, int height) // 填充一个椭圆 void fillOval(int x, int y, int width, int height)
四、Java 图片操作
读取图片
方法一: 通过 java.awt.Toolkit 工具类来读取本地、网络 或 内存中 的 图片(支持 GIF、JPEG 或 PNG)
Image image = Toolkit.getDefaultToolkit().getImage(String filename); Image image = Toolkit.getDefaultToolkit().getImage(URL url); Image image = Toolkit.getDefaultToolkit().createImage(byte[] imageData);
方法二: 通过 javax.imageio.ImageIO 工具类读取本地、网络 或 内存中 的 图片(BufferedImage 继承自 Image)
BufferedImage bufImage = ImageIO.read(File input); BufferedImage bufImage = ImageIO.read(URL input); BufferedImage bufImage = ImageIO.read(InputStream input);
通过Graphics 的 绘制方法设置图片为背景
JPanel jPanel = new javax.swing.JPanel() { @Override public void paintComponent(Graphics g) { super.paintComponent(g); ImageIcon ii = new ImageIcon("C:\\Users\\Administrator\\Desktop\\timg2.jpg"); g.drawImage(ii.getImage(), 0, 0, getWidth(), getHeight(), ii.getImageObserver()); } };