setUndecorated不使用非默认外观

时间:2014-02-17 19:09:29

标签: java swing jframe

import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class Frame {

    private JFrame jFrame;

    public Frame() {
        try {
            UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
            JFrame.setDefaultLookAndFeelDecorated(true);
            JDialog.setDefaultLookAndFeelDecorated(true);
        } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException e) {
            e.printStackTrace();
        }
    }

    private void create() {
        jFrame = new JFrame("frame");
        jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jFrame.setSize(200, 200);
        jFrame.setVisible(true);
    }

    public static void main(String[] args) {
        new Frame().create();
    }

}

上面的代码工作正常,但如果我将jFrame.undecorated设置为true,它不会删除框架?有谁知道为什么不呢?感谢。

编辑:还发现如果我将jFrame.undecorated设置为false,则还会显示另一个具有默认外观的帧。像这样:

example

2 个答案:

答案 0 :(得分:1)

检查setUndecorated()方法上的doc - 只能在不可见时调用。你的代码在构造函数中注释掉了两个调用,但添加了jFrame.setUndecorated(true);在setVisible()调用之前。

import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class Frame {

private JFrame jFrame;

public Frame() {
    try {
                UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
        //JFrame.setDefaultLookAndFeelDecorated(true);
        //JDialog.setDefaultLookAndFeelDecorated(true);

    } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException e) {
        e.printStackTrace();
    }
}

private void create() {
    jFrame = new JFrame("frame");
    jFrame.setUndecorated(true);
    jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    jFrame.setSize(200, 200);
    jFrame.setVisible(true);

}

public static void main(String[] args) {
    new Frame().create();
}

}

答案 1 :(得分:0)

我遇到了类似的问题,什么对我有用:

setUndecorated(true)要在框架的构造函数中进行修饰。 在主类的之前中,“外观”实例化对象(您的框架)。曾经被称为setVisible的东西对我有用。