2014-02-07 111 views
1

我想在我的JFrame在Swing上彈出一個窗口。我做到了這一點,彈出窗口將被分層到舊的JFrame上,並通過傳遞JFrame然後.disable()來禁用舊窗口。但是,我也試圖讓背後的框架變暗以顯示它被禁用。通過JFrame改變亮度?

我發現這一點: stackoverflow - Change brightness of JFrame

但我怎麼用它來降低我有作爲就在我禁用它的參數JFrame的亮度?類似於變暗(框架)並使用變暗功能(JFrame框架)降低它。謝謝!

+0

這不是你如何禁用的JFrame。您可以通過使用模態JDialog來完成此操作。至於調暗JFrame,請向我們展示*** ***代碼,最好是[小型,工作,最小示例程序](http://stackoverflow.com/help/mcve),並告訴我們它是如何工作的。一種考慮的方法是使用JRootPane的玻璃面板。 –

+0

我的「彈出」是一個我自定義的JDialog,它使用圖像作爲背景,而.disabled部分即使它不贊成使用。對不起,如果它的壞習慣我是編程新手 – user3285692

+0

使對話框模態(見我的例子下面),並且最好避免使用已棄用的方法。 –

回答

1

其實,我打算讓我的評論答案:

  • 要顯示一個窗口,在另一個窗口,並禁用下面的窗口,使上窗口模式的JDialog,並將下方的窗口作爲其父項。
  • 調暗頂層窗口的一種方法是獲取其玻璃窗格,將其設置爲可見,並在其上繪製半透明灰色。

這裏是我的概念代碼測試:

import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.Dialog.ModalityType; 
import java.awt.Graphics; 
import java.awt.event.ActionEvent; 
import javax.swing.*; 

public class DimView { 
    protected static final Color GP_COLOR = new Color(0, 0, 0, 30); 

    private static void createAndShowGui() { 
     final JFrame frame = new JFrame("DimView"); 
     final JPanel glassPanel = new JPanel() { 
     protected void paintComponent(Graphics g) { 
      super.paintComponent(g); 
      g.setColor(GP_COLOR); 
      g.fillRect(0, 0, getWidth(), getHeight()); 
     }; 
     }; 
     glassPanel.setOpaque(false); 
     frame.setGlassPane(glassPanel); 
     JPanel mainPanel = new JPanel(); 
     mainPanel.setPreferredSize(new Dimension(400, 400)); 
     mainPanel.setBackground(Color.pink); 
     mainPanel.add(new JButton(new AbstractAction("Push Me") { 

     @Override 
     public void actionPerformed(ActionEvent evt) { 
      glassPanel.setVisible(true); 

      JDialog dialog = new JDialog(frame, "Dialog", 
        ModalityType.APPLICATION_MODAL); 
      dialog.add(Box.createRigidArea(new Dimension(200, 200))); 
      dialog.pack(); 
      dialog.setLocationRelativeTo(frame); 
      dialog.setVisible(true); 

      glassPanel.setVisible(false); 
     } 
     })); 

     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.getContentPane().add(mainPanel); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
      createAndShowGui(); 
     } 
     }); 
    } 
} 
+0

謝謝。我創建了一個帶有半透明圖像的JLabel作爲其圖標並將其設置爲GlassPane。像魅力一樣工作 – user3285692

+0

@ user3285692:太棒了 - 很高興你的工作正常!它用JPanel爲我工作,只是將它設置爲可見或不可見。例如,請參閱上面的代碼。 –