RaisedBevelBorder凸起斜面边框

wen java案例 1

本文目录导读:

RaisedBevelBorder凸起斜面边框

  1. 基本概念
  2. 在 Java Swing 中的用法
  3. 常用创建方式
  4. 与相关概念的对比
  5. 视觉原理
  6. 实际应用场景
  7. 注意事项

RaisedBevelBorder 是 Java Swing 中 javax.swing.border.BevelBorder 类的一个常量或具体实现,用于创建凸起斜面边框

在 Java Swing 中,BevelBorder 类通过模拟光线照射来产生立体效果,共有两种类型:

  1. BevelBorder.RAISED(凸起)—— 即你提到的 RaisedBevelBorder
  2. BevelBorder.LOWERED(凹陷)

基本概念

凸起斜面边框通过颜色的明暗对比,使组件看起来高于屏幕表面:

  • 上边和左边:使用较亮的颜色(高光),模拟光线从左上角照射
  • 下边和右边:使用较暗的颜色(阴影)
  • 人的视觉会自然地认为亮部是受光面,暗部是背光面,从而产生凸起的立体感

在 Java Swing 中的用法

import javax.swing.*;
import javax.swing.border.BevelBorder;
import java.awt.*;
public class RaisedBevelExample {
    public static void main(String[] args) {
        JFrame frame = new JFrame("Raised Bevel Border 示例");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(300, 200);
        frame.setLayout(new FlowLayout());
        // 创建一个按钮,并设置凸起斜面边框
        JButton button = new JButton("凸起的按钮");
        button.setBorder(BorderFactory.createRaisedBevelBorder());
        // 或者更细致的写法:
        // button.setBorder(new BevelBorder(BevelBorder.RAISED));
        // 创建一个面板,也使用凸起边框
        JPanel panel = new JPanel();
        panel.setPreferredSize(new Dimension(100, 80));
        panel.setBorder(BorderFactory.createRaisedBevelBorder());
        panel.add(new JLabel("面板内容"));
        frame.add(button);
        frame.add(panel);
        frame.setVisible(true);
    }
}

常用创建方式

// 方式一:使用 BorderFactory 工厂方法(推荐)
Border raisedBorder = BorderFactory.createRaisedBevelBorder();
// 方式二:直接使用 BevelBorder 构造
Border raisedBorder2 = new BevelBorder(BevelBorder.RAISED);
// 方式三:自定义颜色(更高级)
Color highlightOuter = Color.WHITE;
Color highlightInner = new Color(220, 220, 220);
Color shadowOuter = Color.GRAY;
Color shadowInner = Color.DARK_GRAY;
Border customRaisedBorder = BorderFactory.createBevelBorder(
    BevelBorder.RAISED,
    highlightOuter, highlightInner,
    shadowOuter, shadowInner
);
// 或使用构造方法
Border customRaisedBorder2 = new BevelBorder(
    BevelBorder.RAISED,
    highlightOuter, highlightInner,
    shadowOuter, shadowInner
);

与相关概念的对比

边框类型 效果 典型适用场景
RaisedBevelBorder(凸起) 组件看起来凸出屏幕 按钮默认外观、面板、可点击控件
LoweredBevelBorder(凹陷) 组件看起来凹进屏幕 文本输入框、被按下的按钮、状态栏
EtchedBorder(蚀刻/刻线) 浅槽或浅脊效果 分组框、分隔区域
LineBorder(线条边框) 纯色线条,无立体感 简单边界标记
CompoundBorder(复合边框) 多个边框组合 需要多种边框效果时

视觉原理

BevelBorder 的渲染逻辑:

// 对于凸起 (RAISED):
上边缘外高光 -> 上边缘内高光 -> 内容区域 -> 下边缘内阴影 -> 下边缘外阴影
                    (亮)                       (暗)
  • 外高光:亮白色
  • 内高光:稍暗的亮色
  • 内阴影:深灰色
  • 外阴影:最深色

实际应用场景

  1. 按钮:Swing 按钮默认就使用了某种边框,而 RaisedBevelBorder 可以强化按钮的"可点击"暗示
  2. 面板装饰:让子面板从背景中"浮"出来
  3. 自定义组件:制作仿真 3D 效果 UI
  4. 状态指示:配合 LOWERED 边框,通过切换边框类型模拟按钮按下/释放的交互反馈
button.addActionListener(e -> {
    // 按钮按下时切换边框效果
    if (button.getBorder() instanceof BevelBorder) {
        BevelBorder current = (BevelBorder) button.getBorder();
        if (current.getBevelType() == BevelBorder.RAISED) {
            button.setBorder(BorderFactory.createLoweredBevelBorder());
        } else {
            button.setBorder(BorderFactory.createRaisedBevelBorder());
        }
    }
});

注意事项

  • RaisedBevelBorder 的颜色基于组件背景色自动计算,效果会受组件背景色影响
  • 如果希望完全控制颜色,使用自定义颜色的构造方法
  • 在高 DPI 屏幕下,2 像素的斜面效果可能不够明显,可以考虑使用自定义绘制或更厚的边框
  • 现代 Java 开发中(特别是 Java 8+ 的 FlatLaf 等主题),默认已经较少依赖斜面边框,更趋向扁平设计

如果你是在非 Swing 的 GUI 框架(如 JavaFX、Android、iOS)中看到这个词,通常也指类似概念的 3D 凸起边框效果,只是实现方式不同。

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