本文目录导读:
基本用法
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() 方法。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播