簡體   English   中英

Java:如何在未修飾的JFrame周圍繪制邊框?

[英]Java: How to draw a border around an undecorated JFrame?

我目前有來自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);

注意:我正在使用框架的根窗格來繪制邊框,因為框架本身不支持邊框。

問題是邊框是在組件內部繪制的,如下圖所示,陰影邊框是在框架內部的邊界內繪制的:

在此輸入圖像描述

注意:(陰影)邊框是在框架內繪制的,而不是在框架外部。

使用什么樣的邊框並不重要,它們都是在JFrame內部繪制的。

我的問題是:是否有可能在框架周圍繪制任何邊框,而不僅僅是在框架的邊界內?


可以用來解決這個問題的一種方法是創建一個透明的不同的未修飾的全屏窗口,將普通窗口放在這個窗口的頂部。 此全屏窗口用於繪制陰影,因此不需要在幀本身中繪制陰影。 這是一個獲得類似結果的解決方案,但這不是我想要的。 我想畫框外的邊框。 這些解決方案通常會導致其他問題。

是的,您可以在未修飾的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();
    }

} 

在此輸入圖像描述

JFrames和JDialogs是唯一需要與外部窗口系統交互的(swing)窗口。 要獲得外部陰影,您需要外部上下文 看到這個答案如何獲得它:

未修飾的JFrame陰影

來自http://nadeausoftware.com/articles/2009/02/windows_java_tip_how_control_window_decorations

一些Java外觀可以提供自己的標題欄,圖標和窗口邊框。 如果外觀支持此功能,則其getSupportsWindowDecorations()方法將返回true。

所以你需要實現自己的Java外觀。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM