JavaRush /Java блог /Random /Плавное исчезновение сообщения об ошибке
ViktoriA
4 уровень
Львов

Плавное исчезновение сообщения об ошибке

Статья из группы Random
Нужно не ниже 8 JDK, проверено на семерке, ругается матом. Класс исключения, которое выводит сообщение об ошибки в ГУЙ, и спустя некоторое время, медленно закрывает окно с сообщением Плавное исчезновение сообщения об ошибке - 1

    private static class ProcentInputException extends Exception {
        private String s;
        private JFrame wn;
        private Timer t;
        private float f = 1.0f;
 
        public ProcentInputException(double d) {
            s = "ProcentInputException>> " + d + " більше ніж 100%";
        }
        
        @Override
        public String toString(){
            return s;
        }
        
        public void outError(){
            //если нужно дикорированое окно снимите комент со следующей строки
            //JFrame.setDefaultLookAndFeelDecorated(true);
            wn = winX_YUndecoration(new Dimension(600, 150), Color.red);//создаем окно в центре экрана
                JPanel p = Panels.RGBPanel(RGB.getColor(Const.RED_A40000));
                    JLabel l = Labels.RGBBold(Const.BLUE, 16, s);
                p.add(l);
            wn.getContentPane().add(p);//Добавляем  компоненты
            TimerTask tt = new TimerTask() {
                @Override
                public void run() {
                    f -= 0.01f;//уменьшаем непрозрачность
                    if(f > 0){
                        SwingUtilities.invokeLater(new Runnable() {
                            @Override
                            public void run() {
                                wn.setOpacity(f);//задаем непрозрачность
                                wn.validate();//обновляем окно
                            }
                        });
                    }
                    else{
                        wn.setVisible(false);//закрываем окно
                        t.cancel();//останавливаем таймер
                    }
                }
            };
            t = new Timer();
            t.schedule(tt, 45, 45);/*Запускаем таймер, расчиттывая время исходя из того, 
            сколько должно прожить наше окно, и множим ето время на 10. В даном примере окно 
            существует 4,5 секунды*/
            
        }

    public static JFrame winX_YUndecoration(Dimension dim, Color c) {
        int x = dim.width;
        int y = dim.height;
        JFrame win = new JFrame();
            win.setSize(x, y);
            win.setLocation(0, 0);
            win.getContentPane().setBackground(c);
            win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            win.setUndecorated(true);
        win.setVisible(true);
        return win;
    }
    }
Комментарии (1)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Ярослав Уровень 40 Master
8 февраля 2019
JFrame wn; JFrame win; За такое нужно бить линейкой по рукам, почему нельзя назвать переменную frame?