2014-02-07 3 views
1

Я пытаюсь сделать всплывающее окно над своим JFrame в Swing. Я сделал так, чтобы всплывающее окно было наложено поверх старого JFrame и отключить старый, передав в JFrame, а затем .disable(). Тем не менее, я также пытаюсь сделать фрейм за темным, чтобы показать, что он отключен.Переход в JFrame для изменения яркости?

Я нашел это: stackoverflow - Change brightness of JFrame

Но как я использую его, чтобы понизить яркость JFrame, что я имею в качестве параметра как раз перед я отключить его? Что-то вроде darken (frame), и оно понижает его, используя функцию darken (JFrame frame). Благодаря!

+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: great - рад, что у вас это работает! Это работало для меня с JPanel, просто устанавливая его видимым или нет. См. Например, код выше. –