Создайте прозрачный JFrame в java swing - PullRequest
4 голосов
/ 05 декабря 2011

Привет всем, я сделал свинговое приложение в Java, но проблема в том, как мне добиться прозрачной рамки в Java.

Я хочу создать дизайн пользовательского интерфейса, как в прикрепленном изображении, но проблема в том, что кадры не прозрачны, поэтому он показывает цвет по умолчанию, если на этом слое нет компонентов.

Как и на правой стороне, я хочу показать этот кадр как прозрачный на верхней свободной и нижней свободной части,

Я использую AWTUtilities, но у меня это не работает.

как я могу это сделать, пожалуйста, ответ,

также дайте мне подсказку, чтобы перетащить окно за строкой заголовка, в неокрашенном окне

заранее спасибо enter image description here

1 Ответ

3 голосов
/ 05 декабря 2011

Компонент прозрачного фона

public class TransparentBackground extends Jcomponent { 
    private JFrame frame; 
    private Image background;

public TransparentBackground(JFrame frame) {
    this.frame = frame;
    updateBackground( );
}

public void updateBackground( ) {
    try {
        Robot rbt = new Robot( );
        Toolkit tk = Toolkit.getDefaultToolkit( );
        Dimension dim = tk.getScreenSize( );
        background = rbt.createScreenCapture(
        new Rectangle(0,0,(int)dim.getWidth( ),
                          (int)dim.getHeight( )));
    } catch (Exception ex) {
        p(ex.toString( ));
        ex.printStackTrace( );
    }
}
public void paintComponent(Graphics g) {
    Point pos = this.getLocationOnScreen( );
    Point offset = new Point(-pos.x,-pos.y);
    g.drawImage(background,offset.x,offset.y,null);
}
}

Вы можете запустить это с помощью простого метода main (), поместив несколько компонентов на панель и поместив его в рамку:

public static void main(String[] args) {
    JFrame frame = new JFrame("Transparent Window");
    TransparentBackground bg = new TransparentBackground(frame);
    bg.setLayout(new BorderLayout( ));
    JButton button = new JButton("This is a button");
    bg.add("North",button);
    JLabel label = new JLabel("This is a label");
    bg.add("South",label);
    frame.getContentPane( ).add("Center",bg);
    frame.pack( );
    frame.setSize(150,100);
    frame.show( );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...