本文目录导读:

RaisedBevelBorder 是 Java Swing 中 javax.swing.border.BevelBorder 类的一个常量或具体实现,用于创建凸起斜面边框。
在 Java Swing 中,BevelBorder 类通过模拟光线照射来产生立体效果,共有两种类型:
BevelBorder.RAISED(凸起)—— 即你提到的 RaisedBevelBorderBevelBorder.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):
上边缘外高光 -> 上边缘内高光 -> 内容区域 -> 下边缘内阴影 -> 下边缘外阴影
(亮) (暗)
- 外高光:亮白色
- 内高光:稍暗的亮色
- 内阴影:深灰色
- 外阴影:最深色
实际应用场景
- 按钮:Swing 按钮默认就使用了某种边框,而
RaisedBevelBorder可以强化按钮的"可点击"暗示 - 面板装饰:让子面板从背景中"浮"出来
- 自定义组件:制作仿真 3D 效果 UI
- 状态指示:配合
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 凸起边框效果,只是实现方式不同。
版权声明: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直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播