【问题标题】:Have user press enter key to toggle between full screen让用户按回车键在全屏之间切换
【发布时间】:2017-03-09 00:30:04
【问题描述】:

我有一个简单的框架,它有一个按钮来切换该框架是否全屏。我想拥有它,以便用户只需按回车键即可切换全屏。我对 Java 很陌生。我希望事件监听器位于private FrontEnd()

    import java.awt.event.*;
    import javax.swing.*;

    public class FrontEnd extends JFrame {
        private boolean FullScreenMode = false;
        private int PrevX, PrevY, PrevWidth, PrevHeight;

        public static void main(String[] args) {
            FrontEnd frame = new FrontEnd();
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setSize(480, 320);
            frame.setVisible(true);
        }

        private FrontEnd() {

            JPanel contentPane = new JPanel();
            setContentPane(contentPane);

            // From Here starts the trick
            FullScreenEffect effect = new FullScreenEffect();

            JButton fullscreenButton = new JButton("Fullscreen Mode");
            fullscreenButton.addActionListener(effect);

            contentPane.add(fullscreenButton);
            fullscreenButton.setVisible(true);
        }

        private class FullScreenEffect implements ActionListener {
            @Override
            public void actionPerformed(ActionEvent arg0) {
                if (!FullScreenMode) {
                    PrevX = getX();
                    PrevY = getY();
                    PrevWidth = getWidth();
                    PrevHeight = getHeight();

                    dispose();
                    setUndecorated(true);

                    setBounds(0, 0, getToolkit().getScreenSize().width, getToolkit().getScreenSize().height);

                    setVisible(true);
                    FullScreenMode = true;
                } else {
                    dispose();
                    setUndecorated(false);

                    setBounds(PrevX, PrevY, PrevWidth, PrevHeight);

                    setVisible(true);
                    FullScreenMode = false;
                }
            }
        }

【问题讨论】:

  • 有什么问题?你有错误吗?
  • 没有任何错误。该按钮按预期工作。但我想要一个按键,而不是单击按钮。所以没有按钮,用户按回车键切换全屏
  • 好吧,Using Keylistener 或者更好的是key binding。您应该先尝试这些解决方案。
  • 正在检查类似问题here

标签: java swing awt


【解决方案1】:

我有一个简单的框架,它有一个按钮来切换该框架是否全屏。我想拥有它,这样用户只需按回车键即可切换全屏。

不要使用 KeyListener!

Swing 旨在使用Key BindingsKeyStroke 映射到Action

执行此操作的最简单方法是将按钮设为框架的默认按钮,然后 Enter 键将激活该按钮。

frame.getRootPane.setDefaultButon( fullScreenButton );

【讨论】:

    【解决方案2】:

    设法让它工作。工作代码如下:

    import java.awt.*;
    import java.awt.event.KeyEvent;
    import java.awt.event.KeyListener;
    import javax.swing.*;
    
    public class FrontEnd extends JFrame implements KeyListener {
        private boolean FullScreenMode = false;
        private int PrevX, PrevY, PrevWidth, PrevHeight;
    
        public static void main(String[] args) {
            FrontEnd frame = new FrontEnd();
            frame.setTitle("Frame Title");
            frame.setResizable(false);
            frame.setSize(600, 600);
            frame.setMinimumSize(new Dimension(600, 600));
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.getContentPane().setBackground(Color.black);
            frame.pack();
            frame.setVisible(true);
        }
    
        public void keyPressed(KeyEvent e) {
            if (e.getKeyCode() == KeyEvent.VK_ENTER)
                FullScreenToggle();
            else if (e.getKeyCode() == KeyEvent.VK_ESCAPE)
                ExitApplication();
        }
    
        public void keyReleased(KeyEvent e) {
        }
        public void keyTyped(KeyEvent e) {
        }
    
        public FrontEnd(){
            addKeyListener(this);
        }
    
        public void FullScreenToggle() {
            if (!FullScreenMode) {
                PrevX = getX();
                PrevY = getY();
                PrevWidth = getWidth();
                PrevHeight = getHeight();
    
                dispose();
                setUndecorated(true);
    
                setBounds(0, 0, getToolkit().getScreenSize().width, getToolkit().getScreenSize().height);
    
                setVisible(true);
                FullScreenMode = true;
            } else {
                dispose();
                setUndecorated(false);
    
                setBounds(PrevX, PrevY, PrevWidth, PrevHeight);
    
                setVisible(true);
                FullScreenMode = false;
            }
        }
    
        public void ExitApplication() {
            System.exit(0);
        }
    }
    

    【讨论】:

    • 发布没有解释的工作代码不是很有用。
    • 就像我上面所说的,我对 Java 很陌生,我自己并不完全理解它是如何工作的。但是发布工作代码总比没有工作解决方案要好。因此可能会帮助某人。
    • (1-) 除了这是一个非摆动解决方案(请参阅我的答案)之外,变量名称不应以大写字母开头。方法名称不应以大写字母开头。您发布的解决方案应该推广标准的 Java 编码约定。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-15
    相关资源
    最近更新 更多