2
package javaapplication1;

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

public class JavaApplication1 {

    /**
     * @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) {
                JOptionPane.showMessageDialog(frame, "JOptionPane");
            }
        });
    }
}

ボタンをクリックすると、全画面表示に設定されているアプリケーションがタスクバー/最小化に移動するため、トリガーした JOptionPane を表示する前に、タスクバーで最初にクリックする必要があります。これの何が問題だと思いますか?最小化したり、タスクバーに移動したりせずにスムーズに実行したいと思います。あなたの答えを楽しみにしています。前もって感謝します。または、これに代わる他の方法はありますか?

4

2 に答える 2

5

このコードは私にとってはうまくいきますが、2 つの変更を加えてこのバリアントを試すこともできます。

  1. EDT で GUI を作成して表示します。
  2. フレームのコンテンツ ペインを親として使用します。JOptionPane

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

public class JavaApplication1 {

    public static void main(String[] args) {
        Runnable r = new Runnable() {

            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));
                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) {
                        //JOptionPane.showMessageDialog(frame, "JOptionPane");
                        JOptionPane.showMessageDialog(frame.getContentPane(), "JOptionPane");
                    }
                });
            }
        };
        SwingUtilities.invokeLater(r);
    }
}

アップデート

上記のソースの先頭に次の行を追加すると..

System.out.println(System.getProperty("java.version"));
System.out.println(System.getProperty("java.vm.version"));

..出力と結果は次のとおりです。

1.7で実行

結果: 質問に記載されている失敗。

1.7.0_09
23.5-b02

1.6で実行

結果: 異常なアーティファクトや動作なしで成功。

1.6.0
1.6.0-b105

分析

コメントからの他の結果は、初期の 1.6 バージョンと 1.6.0_25 の間で動作が変更されたことを示唆していることに注意してください。回帰バグのようです。OP はバグ データベースをチェックする必要があります。何も表示されない場合は、新しいレポートを提出してください。

于 2012-12-25T11:14:10.780 に答える
2
JOptionPane.showInternalMessageDialog(frame.getContentPane(), "JOptionPane");
于 2012-12-26T07:44:56.997 に答える