本文目录导读:
基本用法
LineBorder是Swing中最简单的边框类型,用于绘制一个纯色的直线边框。
import javax.swing.*;
import javax.swing.border.LineBorder;
import java.awt.*;
public class LineBorderExample {
public static void main(String[] args) {
JFrame frame = new JFrame("LineBorder 示例");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 300);
frame.setLayout(new GridLayout(2, 2, 10, 10));
// 1. 创建默认黑色线边框
JPanel panel1 = new JPanel();
panel1.setBorder(new LineBorder(Color.BLACK));
panel1.add(new JLabel("默认黑色边框"));
// 2. 创建指定颜色和粗细的边框
JPanel panel2 = new JPanel();
panel2.setBorder(new LineBorder(Color.RED, 3));
panel2.add(new JLabel("红色边框,粗细3像素"));
// 3. 创建带圆角的边框
JPanel panel3 = new JPanel();
panel3.setBorder(new LineBorder(Color.BLUE, 2, true)); // 圆角边框
panel3.add(new JLabel("蓝色圆角边框"));
// 4. 使用静态方法创建 (Swing 5+)
JPanel panel4 = new JPanel();
panel4.setBorder(BorderFactory.createLineBorder(Color.GREEN, 4));
panel4.add(new JLabel("绿色边框(工厂方法)"));
frame.add(panel1);
frame.add(panel2);
frame.add(panel3);
frame.add(panel4);
frame.setVisible(true);
}
}
LineBorder 构造函数详解
javax.swing.border.LineBorder 提供了三个构造函数:
| 构造方法 | 说明 |
|---|---|
LineBorder(Color color) |
创建指定颜色的1像素粗细的边框 |
LineBorder(Color color, int thickness) |
创建指定颜色和粗细的边框 |
LineBorder(Color color, int thickness, boolean roundedCorners) |
创建指定颜色、粗细和是否圆角的边框 |
使用 BorderFactory 工厂方法
Swing提供了更便捷的工厂方法来创建边框:
// 简单线条边框 Border border1 = BorderFactory.createLineBorder(Color.RED); // 指定粗细 Border border2 = BorderFactory.createLineBorder(Color.BLUE, 3); // 在不可用组件上使用灰色边框 Border border3 = BorderFactory.createLineBorder(Color.GRAY, 2);
组合多种边框(带标题)
可以为组件添加多个边框,并在最外层添加标题:
JPanel panel = new JPanel(); // 创建复合边框:内层线条 + 外层标题 Border lineBorder = BorderFactory.createLineBorder(Color.ORANGE, 2); Border titledBorder = BorderFactory.createTitledBorder(lineBorder, "带标题的线条边框"); panel.setBorder(titledBorder);
自定义边框绘制(重写paintBorder)
如果需要更精细的控制,可以继承 LineBorder 或实现 Border 接口:
import javax.swing.border.AbstractBorder;
class CustomLineBorder extends AbstractBorder {
private Color color;
private int thickness;
public CustomLineBorder(Color color, int thickness) {
this.color = color;
this.thickness = thickness;
}
@Override
public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) {
Graphics2D g2d = (Graphics2D) g.create();
g2d.setColor(color);
g2d.setStroke(new BasicStroke(thickness));
// 绘制矩形边框(偏移半个线宽)
int offset = thickness / 2;
g2d.drawRect(x + offset, y + offset, width - thickness - 1, height - thickness - 1);
g2d.dispose();
}
@Override
public Insets getBorderInsets(Component c) {
return new Insets(thickness, thickness, thickness, thickness);
}
}
运行效果示例
(实际运行后可以看到不同颜色的边框样式)
完整可运行代码
import javax.swing.*;
import javax.swing.border.Border;
import javax.swing.border.LineBorder;
import java.awt.*;
public class CompleteExample {
public static void main(String[] args) {
JFrame frame = new JFrame("LineBorder 完整示例");
frame.setLayout(new FlowLayout(FlowLayout.CENTER, 20, 20));
frame.setSize(500, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 1. 默认1px黑色边框
JLabel label1 = new JLabel("黑色1px");
label1.setBorder(new LineBorder(Color.BLACK));
// 2. 3px红色边框
JLabel label2 = new JLabel("红色3px");
label2.setBorder(new LineBorder(Color.RED, 3));
// 3. 2px蓝色圆角边框
JLabel label3 = new JLabel("蓝色圆角2px");
label3.setBorder(new LineBorder(new Color(0, 0, 255), 2, true));
// 4. 4px绿色边框(工厂方法)
JLabel label4 = new JLabel("绿色4px");
label4.setBorder(BorderFactory.createLineBorder(Color.GREEN, 4));
// 5. 带标题的组合边框
JLabel label5 = new JLabel("带标题边框");
Border inside = BorderFactory.createLineBorder(Color.MAGENTA, 2);
label5.setBorder(BorderFactory.createTitledBorder(inside, "标题"));
// 6. 自定义虚线边框
JLabel label6 = new JLabel("自定义虚线");
label6.setBorder(new CustomDashedBorder(Color.ORANGE, 3, 5));
frame.add(label1);
frame.add(label2);
frame.add(label3);
frame.add(label4);
frame.add(label5);
frame.add(label6);
frame.setVisible(true);
}
}
// 自定义虚线边框类
class CustomDashedBorder extends AbstractBorder {
private Color color;
private int thickness;
private int gap;
public CustomDashedBorder(Color color, int thickness, int gap) {
this.color = color;
this.thickness = thickness;
this.gap = gap;
}
@Override
public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) {
Graphics2D g2d = (Graphics2D) g.create();
g2d.setColor(color);
g2d.setStroke(new BasicStroke(thickness, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL,
0, new float[]{gap}, 0));
g2d.drawRect(x + thickness/2, y + thickness/2,
width - thickness - 1, height - thickness - 1);
g2d.dispose();
}
@Override
public Insets getBorderInsets(Component c) {
return new Insets(thickness, thickness, thickness, thickness);
}
}
| 特性 | 说明 |
|---|---|
| 颜色 | 任何 Color 对象,包括RGB值或预设颜色 |
| 粗细 | 整数值,单位为像素,默认为1 |
| 圆角 | 第三个构造函数参数 boolean roundedCorners |
| 性能 | 对于简单边框,直接使用 LineBorder 更高效 |
| 组合 | 可与 TitledBorder、CompoundBorder 等组合使用 |
如果需要更复杂的边框样式(如渐变、图案等),建议自定义实现 Border 接口并重写 paintBorder() 方法。