2014-02-14 118 views
2

我知道這個問題有一些主題(主要是this unanswered onethis one,它不處理全屏應用程序)。JFileChooser在全屏幕Swing應用程序

我基本上嘗試了第一個主題示例和可用方法(requestFocus,requestFocusInWindow,...)的每個組合,但JFileChooser總是顯示在全屏應用程序後面。我試圖更改filechooser的父母(將其設置爲null,本身或父框架),但沒有更多成功。

有沒有人有這個不那麼特別的用例的工作示例?或者是否有解決方法讓用戶選擇全屏應用程序中的文件?

+0

爲什麼'setExtendedState(JFrame.MAXIMIZED_BOTH)'而不是? – trashgod

+0

因爲最大化的窗口不是全屏窗口 - Windows任務欄在那裏,我不想要它 – bagage

+0

我很少使用全屏幕,從來沒有注意到這種效果。您可以編輯您的問題以闡明需求,確定目標平臺,幷包含顯示您當前方法的[最小,完整,測試和可讀示例*](http://stackoverflow.com/help/mcve)。 – trashgod

回答

3

不幸的是,我不能說你是如何實現全屏應用的。但是,我嘗試了一些東西,這個想出了:

import java.awt.Color; 
import java.awt.Frame; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JButton; 
import javax.swing.JFileChooser; 
import javax.swing.JFrame; 
import javax.swing.SwingUtilities; 

public class Gui extends JFrame { 

    public Gui() { 

     this.setDefaultCloseOperation(EXIT_ON_CLOSE); 

     //this.setSize(java.awt.Toolkit.getDefaultToolkit().getScreenSize()); 
     // Set some charateristics of the frame 
     this.setExtendedState(Frame.MAXIMIZED_BOTH); 
     this.setBackground(Color.black); 
     this.setUndecorated(true); 

     JButton a = new JButton("PRESS ME!"); 

     a.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent arg0) { 
       JFileChooser fc = new JFileChooser(); 
       fc.showOpenDialog(getParent()); 
      } 
     }); 

     this.add(a); 

     this.setVisible(true); 

    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       new Gui(); 
      } 
     }); 
    } 
} 

注重事實,我創建了一個新的JFileChooser與當前的JFrame作爲參數的父。

編輯: 我現在甚至試圖設置

java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().setFullScreenWindow(new Gui()); 

並沒有

this.setUndecorated(true); 

它爲我工作(有一個不錯的全屏視圖和JFileChooser的是在前面) 。我相信窗口裝飾的問題與我的窗口管理器(我使用linux和gnome)相關聯。

希望這個解決方案對你有用,如果沒有的話: 你能解釋一點點,你如何創建全屏應用?

+0

感謝您的例子(注意:給定的代碼缺少'import java.awt.Frame;')。不幸的是,這不適用於CentOS,[見圖片](http://postimg.org/image/p8wljn0gr/786a51ec/)。我會在今天下午在Windows上嘗試它,但我認爲這不會奏效。我將編輯我的問題。 – bagage

+0

其實你的代碼在Windows 8上工作,但不能在CentOS上工作(以前的評論),並沒有完全在gnome-shell上工作,[見第二張圖片](http://s11.postimg.org/h3m2zndn7/aaaa.png )。但是隨着你的編輯,這也在gnome-shell上工作。 – bagage

+0

Jep,我也認識到gnome的問題......所以編輯;)。我不知道CentOS知道如何解決這個問題。你自己找到了解決方案嗎?我發現一個有關全屏應用程序和Java 6的錯誤的問題。也許這有助於[鏈接](http://stackoverflow.com/questions/8837719/java-in-full-screen-on-linux-how-to-cover -task-bar) – ROT13

0

我會建議,而不是使用使用彈出窗口,只需將JFileChooser嵌入到您的應用程序。在沒有窗口的應用程序中使用彈出窗口是沒有意義的(就我個人而言,我不喜歡彈出窗口)。

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

public class FullScreenApp { 

    public static void main(String[] args) { 
     final JFrame frame = new JFrame(); 
     frame.setTitle("Frame"); 
     frame.setSize(800, 600); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     GraphicsDevice device = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice(); 
     device.setFullScreenWindow(frame); 
     device.setDisplayMode(new DisplayMode(800, 600, 32, 60)); // Ugh. 
     frame.setVisible(true); 

     final Box panel = Box.createVerticalBox(); 
     JButton btn = new JButton(); 
     btn.setText("Button"); 

     panel.add(btn); 
     frame.add(panel); 

     final CustomFileChooser chooser = new CustomFileChooser(panel); 

     btn.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       chooser.show(); 
      } 
     }); 
    } 

    public static class CustomFileChooser extends JFileChooser{ 
     /** Node this chooser should be added to. 
      * There's likely a better way of doing this, 
      * but it was convenient for a quick example */ 
     Container parent; 

     public CustomFileChooser(Container parent){ 
      super(); 
      this.parent = parent; 
      //Make configurations for your file chooser 
      setApproveButtonText("Open"); 
     } 

     @Override 
     public void approveSelection(){ 
      super.approveSelection(); 
      //Perform accept action here 
      System.out.println(getSelectedFile().getAbsolutePath()); 
      parent.remove(CustomFileChooser.this); 
      parent.repaint(); 
     } 

     @Override 
     public void cancelSelection(){ 
      super.cancelSelection(); 
      //Perform cancel action here 
      System.out.println("Canceled"); 
      parent.remove(CustomFileChooser.this); 
      parent.repaint(); 
     } 

     @Override 
     public void show(){ 
      rescanCurrentDirectory(); 
      parent.add(this); 
      revalidate(); 
      repaint(); 
     } 

     @Override 
     public Dimension getMaximumSize(){ 
      //Not necessary - But I felt the chooser should have a maximum size 
      return new Dimension(500,300); 
     } 
    } 
} 
0

FullscreenLib

//import 
    import argha.util.Fullscreen; 

    //this for JFrame 
    //true for setting Undecorated on/off 
    Fullscreen screen = new Fullscreen(this, true); 
    screen.DoTheWorkFor(); 

你可以使用我的圖書館創建全屏窗口和你所面對的問題,希望以後我測試和它的工作解決了。

希望它可以幫到你

相關問題