我目前有 SwingX
库中的 DropShadowBorder
类(它扩展了 javax.swing.border.Border
类),所以这个是常规 Border
的实例。我想在未修饰的 JFrame
周围绘制此边框。我目前在我的 JFrame
中使用以下方法来设置边框:
DropShadowBorder b = new DropShadowBorder(Color.BLACK, 0, 10, 0.2f, 10, true, true, true, true);
this.getRootPane().setBorder(b);
注意:我使用框架的根 Pane 来绘制边框,因为框架本身不支持边框。
问题是边框是在组件本身内部绘制的,如下图所示,阴影边框是在内部绘制的,与框架本身的边界相对:
注意:(带阴影的)边框是在框架内绘制的,而不是在框架外。
无论使用何种边框,它们都在 JFrame
本身内部绘制。
我的问题是:是否可以在框架周围绘制任何边框,而不仅仅是在框架边界的内部?
可以用来解决这个问题的一种方法是创建一个不同的未修饰的透明全屏窗口,普通窗口放在这个窗口之上。这个全屏窗口用于绘制阴影,因此不需要在框架本身中绘制阴影。这是获得类似结果的解决方案,但这不是我想要的。我想在框架外画一个边框。这些解决方案通常会导致其他问题。
最佳答案
是的,您可以在未修饰的 JFrame 周围绘制边框。 只需获取 JFrame 的根 Pane 并通过 setBorder(Border border) 方法设置其边框即可。
getRootPane().setBorder(BorderFactory.createMatteBorder(4, 4, 4, 4, Color.RED));
例如:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class Borders2UndecoFrame extends JFrame{
JLabel label = new JLabel("Welcome!", JLabel.CENTER);
public Borders2UndecoFrame(){
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(new Dimension(200, 200));
add(label, BorderLayout.CENTER);
setUndecorated(true);
getRootPane().setBorder(BorderFactory.createMatteBorder(4, 4, 4, 4, Color.RED));
setVisible(true);
}
public static void main(String[] args) {
new Borders2UndecoFrame();
}
}
关于Java:如何在未修饰的 JFrame 周围绘制边框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20165698/