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)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Ярослав Java Developer Master
8 февраля 2019, 23:33
JFrame wn; JFrame win; За такое нужно бить линейкой по рукам, почему нельзя назвать переменную frame?