目前,我从DropShadowBorder
库中获得了javax.swing.border.Border
类(它扩展了SwingX
类),因此这是常规Border
的一个实例。我想把这条边界画在我未装饰的JFrame
周围。我目前正在JFrame
中使用以下方法来设置边框:
DropShadowBorder b = new DropShadowBorder(Color.BLACK, 0, 10, 0.2f, 10, true, true, true, true);
this.getRootPane().setBorder(b);
注意:我使用框架的根窗格来绘制边框,因为框架本身不支持边框本身。
问题是,边界是在组件本身内绘制的,正如您在下面的图片中所看到的,阴影边框是在内部绘制的,与框架本身的边界相对应:
注意:(阴影)边框是在框架内针对其边界绘制的,而不是在框架之外绘制的。
使用什么样的边框并不重要,它们都是在JFrame
本身中绘制的。
我的问题是:是否可以在框架周围画任何边框,而不仅仅是在框架的边界上画边框?
可以用来解决这个问题的一种方法是创建一个不同的未装饰的全屏幕窗口,这个窗口是透明的,普通的窗口放在这个窗口的顶部。这个全屏窗口用于绘制阴影,因此阴影不需要在框架本身中绘制。这是一个解决方案,以获得类似的结果,这是而不是我想要的。我想在框外画一条边框。这类解决方案通常会引起其他问题。
发布于 2014-09-08 18:20:32
是的,您可以在未装饰的JFrame周围绘制边框。只需获取JFrame的根窗格并通过setBorder(边框)方法设置其边框即可。
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();
}
}
发布于 2013-11-23 16:46:25
JFrames和JDialogs是唯一需要与外部窗口系统交互的swing窗口。要获得外部阴影,需要外部上下文。看看这个关于如何得到它的答案:
发布于 2013-11-23 12:54:59
一些Java外观和感觉可以提供自己的标题栏、图标和窗口边框。如果外观和感觉支持此特性,则它的getSupportsWindowDecorations( )方法将返回true。
因此,您需要实现自己的Java外观和感觉。
https://stackoverflow.com/questions/20165698
复制