LineBorder线条边框绘制

wen java案例 1

本文目录导读:

  1. 基本用法
  2. LineBorder 构造函数详解
  3. 使用 BorderFactory 工厂方法
  4. 组合多种边框(带标题)
  5. 自定义边框绘制(重写paintBorder)
  6. 运行效果示例
  7. 完整可运行代码

基本用法

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

运行效果示例

LineBorder线条边框绘制 (实际运行后可以看到不同颜色的边框样式)

完整可运行代码

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 更高效
组合 可与 TitledBorderCompoundBorder 等组合使用

如果需要更复杂的边框样式(如渐变、图案等),建议自定义实现 Border 接口并重写 paintBorder() 方法。

抱歉,评论功能暂时关闭!