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 に慣れていません。これでこの問題は解決すると思いますか、それとも別の方法がありますか?

4

2 に答える 2

3

これJFileChooserは、Java6を搭載したWindowsXPコンピュータのフレームの中央にあります。2つのディスプレイのさまざまな場所にフレームを移動しました。

表示設定を変更する行をコメントアウトし、その他のいくつかの問題を修正しました。

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);
于 2012-12-26T18:19:54.283 に答える
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);
        }
    }
}
于 2014-02-17T17:20:40.943 に答える