2012-12-25 25 views
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之前。你認爲這是什麼問題?我希望它能夠順利運行而不會被最小化或轉到任務欄。期待您的答案。提前致謝。或者還有其他的選擇嗎?的JOptionPane的JFrame外面顯示與GraphicsDevice的

+0

好的,這是新的。 :) – Jong

+0

1件事情不需要在set中設置setVisible(true)作爲setFullScreenWindow(frame);'將幀設置爲可見,如果它不是。與此說,我也會移動此調用後,所有組件添加到JFrame不是解決了問題,但減少了可能的原因 –

+0

@DavidKroukamp,我刪除了我的舊問題。只是我希望它得到回答,而不是被遺忘。 – Jong

回答

2
JOptionPane.showInternalMessageDialog(frame.getContentPane(), "JOptionPane"); 
+0

這是什麼意思?你是否從我的答案中解決了這個問題?由於該代碼在此處失敗,似乎不太可能。因此,這似乎是「不是答案」,但我不知道你會怎麼想。 –

+0

此代碼適用於我。 – Jong

+0

呵呵。我沒有注意到該代碼行的**內部**部分。所以它與我展示的代碼不同。好的 - 你可能會接受你的答案。很高興你把事情解決了。 –

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

..輸出& re如下所示。

在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應檢查bug database &,提交新報告。

+0

爲什麼它在我的,它沒有。你的意思是什麼?你的意思是它運行平穩無閃爍? – Jong

+0

*「所以我需要先在任務欄中點擊它才能看到我觸發的JOptionPane」*我不需要先點擊。 –

+0

所以你的意思是,一旦點擊按鈕'JOptionPane'彈出已經? – Jong