簡體   English   中英

傳遞JFrame來更改亮度?

[英]Pass in JFrame to change brightness?

我正在嘗試在Swing中的JFrame上彈出一個窗口。 我已經做到了,這樣彈出窗口將在舊的JFrame上分層,並通過傳入JFrame然后禁用.disable()來禁用舊的JFrame。 但是,我也試圖使后面的框變暗以表明它已被禁用。

我發現了這一點: stackoverflow-更改JFrame的亮度

但是,在禁用它之前,如何使用它降低作為參數的JFrame的亮度? 諸如darken(frame)之類的東西,它通過使用darken(JFrame frame)函數將其降低。 謝謝!

實際上,我將使我的評論成為答案:

  • 要在另一個窗口上方顯示一個窗口並禁用下部窗口,請將上部窗口設為模式 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();
         }
      });
   }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM