2012-12-26 48 views
3
import java.awt.DisplayMode; 
import java.awt.GraphicsDevice; 
import java.awt.GraphicsEnvironment; 
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.JPanel; 

public class Sample { 
    public static String audioName; 
    /** 
    * @param args the command line arguments 
    */ 
    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)); 
     frame.setVisible(true); 

     JButton btn = new JButton(); 
     btn.setText("Button"); 
     JPanel panel = new JPanel(); 

     panel.add(btn); 
     frame.add(panel); 
     btn.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       JFileChooser chooser = new JFileChooser(); 
       int returnName = chooser.showOpenDialog(frame); 
       if (returnName == JFileChooser.APPROVE_OPTION) { 
        System.out.println("Sample"); 
       } 
      } 
     }); 
    } 
} 

如何在全屏幕中显示JFileChooser?我不熟悉JInternalFrame/JDesktopPane,你认为这会解决这个问题还是有另一种方法呢?JFileChooser外部显示完全屏蔽JFrame

+0

如果Java应用程序更改我的Windows显示设置,我将永远不会再使用该应用程序。 –

+0

@GilbertLeBlanc,java只会在运行应用程序时将其临时更改。 – Jong

+0

@GilbertLeBlanc可能已经注意到同样的效果,让我对这段代码非常感兴趣。每次运行它时,它都会将屏幕最右侧的两个屏幕WinAmp强制放置在新屏幕大小的限制范围内。这让我意识到,看起来全屏模式在每一步都能捕捉到你。什么是这个应用程序非常重要。它应该是'全屏'? –

回答

3

JFileChooser位于框架中央,位于装有Java 6的Windows XP计算机上。我将框架移到了两台显示器上的不同位置。

我注释了改变显示设置的行,并修复了一些其他问题。

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.JPanel; 
import javax.swing.SwingUtilities; 

public class Sample implements Runnable { 
    public static String audioName; 

    public void run() { 
     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)); 

     JButton btn = new JButton(); 
     btn.setText("Button"); 
     JPanel panel = new JPanel(); 

     panel.add(btn); 
     frame.add(panel); 
     frame.setExtendedState(
       frame.getExtendedState() | JFrame.MAXIMIZED_BOTH); 
     btn.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       JFileChooser chooser = new JFileChooser(); 
       int returnName = chooser.showOpenDialog(frame); 
       if (returnName == JFileChooser.APPROVE_OPTION) { 
        System.out.println("Sample"); 
       } 
      } 
     }); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Sample()); 
    } 
} 

如果你想最大化你的JFrame,您在setVisible方法在什么地方添加以下语句。

frame.setExtendedState(frame.getExtendedState() | JFrame.MAXIMIZED_BOTH); 
+0

您注释掉的代码是**必需的**。 – Jong

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