如何在应用程序运行时调用setUndecorated()?

时间:2011-09-13 20:24:20

标签: java swing jframe

嗨,我不是那么专业的编程,所以我来这里问我怎样才能做到这一点。

问题:单击全屏模式后客户端游戏正在运行我想让它调用setUndecorated(),但在框架已经可见的情况下不能。

我意识到我需要创建一个新的框架,但我不确定如何将所有内容都转移过来,我已经尝试过自己,而我得到的只是新框架的空白屏幕。

这是我的代码:

public Jframe(String args[]) {
    super();
    try {
        sign.signlink.startpriv(InetAddress.getByName(server));
        initUI();
    } catch (Exception ex) {
        ex.printStackTrace();
    }
}

public void initUI() {
    try {
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        JPopupMenu.setDefaultLightWeightPopupEnabled(false);
        frame = new JFrame();
        frame.setLayout(new BorderLayout());
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setBackground(Color.BLACK);
        gamePanel = new JPanel();
        gamePanel.setLayout(new BorderLayout());
        gamePanel.add(this);
        JMenu fileMenu = new JMenu("Menu");

        String[] mainButtons = new String[] { "-", "Donate", "-", "Vote", "-", "Hiscores", "-", "Forums", "-", "Exit"};

        for (String name : mainButtons) {
            JMenuItem menuItem = new JMenuItem(name);
            if (name.equalsIgnoreCase("-")) {
                fileMenu.addSeparator();
            } else {
                menuItem.addActionListener(this);
                fileMenu.add(menuItem);
            }
        }

        JMenuBar menuBar = new JMenuBar();
        JMenuBar jmenubar = new JMenuBar();
        Jframe.frame.setMinimumSize(new Dimension(773, 556));
        frame.add(jmenubar);
        menuBar.add(fileMenu);
        frame.getContentPane().add(menuBar, BorderLayout.NORTH);
        frame.getContentPane().add(gamePanel, BorderLayout.CENTER);
        frame.pack();

        frame.setVisible(true);
        frame.setResizable(true);
        init();
    } catch (Exception e) {
            e.printStackTrace();
    }

我希望你们中的任何一个人能够帮助我真的很感谢!

2 个答案:

答案 0 :(得分:0)

如果这是针对游戏,那么很可能你不想要这个。你应该看看 http://download.oracle.com/javase/tutorial/extra/fullscreen/exclusivemode.html

答案 1 :(得分:0)

我可能会指出显而易见的问题,以及促进错误的方法,但是你不能让它不可见,然后让它再次可见吗?

myFrame.setVisible(false);
myFrame.setUndecorated(true);
myFrame.setVisible(true);

但是,有一种更好的方法,正如“ghostbust555”指出的那样。

这是答案所指的setFullScreenWindow()

public void goFullScreen() {
    GraphicsDevice myDevice =
        GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();

    // wrap in try because we don't want to lock the app in fullscreen mode
    try {
        myDevice.setFullScreenWindow(myFrame);

        // do your stuff
        ...

    } finally {
        myDevice.setFullScreenWindow(null);
    }
}