2017-03-08 21 views
0

我有一個簡單的框架,它有一個按鈕來切換該框架是否全屏。我想擁有它,以便用戶只需按下回車鍵切換全屏。我對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; 
       } 
      } 
     } 
+0

什麼問題?你有錯誤嗎? –

+0

沒有錯誤。該按鈕按預期工作。但不是一個按鈕點擊,我想要一個按鍵。所以沒有按鈕和用戶按下輸入切換全屏 – Ross

+0

那麼,[使用Keylistener](http://stackoverflow.com/questions/21997130/how-to-use-keylistener-with-jframe)或更好的[鍵綁定](https://docs.oracle.com/javase/tutorial/uiswing/misc/keybinding.html)。您應該先嚐試這些解決方案。 – AxelH

回答

-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); 
    } 
} 
+0

不是很有用。 –

+0

就像我上面所說的,我對Java很新,並不完全理解它是如何工作的。但發佈工作代碼比沒有工作解決方案更好。因此可以幫助某人。 – Ross

+0

(1-)除了這是一個非擺動解決方案(請參閱我的答案),變量名稱不應以大寫字母開頭。方法名稱不應以大寫字母開頭。您發佈的解決方案應該促進標準的Java編碼約定。 – camickr

2

我有一個簡單的框架是有一個按鈕來切換該幀是全屏與否。我想擁有它,以便用戶只需按下回車鍵切換全屏。

不要使用KeyListener!

Swing旨在使用Key BindingsKeyStroke映射到Action

最簡單的方法是將按鈕設置爲框架的默認按鈕,然後按Enter鍵將激活按鈕。

frame.getRootPane.setDefaultButon(fullScreenButton);