Плавное исчезновение окна - Java
Формулировка задачи:
Зы, от нечего делать решил запилить плавное исчезновение диалоговых окон, а точнение, сделать так, что бы сообщение об ошибке исчезало само через некоторое время, постепенно делаясь прозрачным.
получилось
Вылажую здесь свою наработку, может кому пригодиться:
клас исключения с методом вывода ошибки в исчезающее окно:
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 = Windows.winUndecoration(new Dimension(600, 150), RGB.getColor(Const.RED_A40000));//создаем окно в центре экрана 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 секунды*/ } }
Решение задачи: «Плавное исчезновение окна»
textual
Листинг программы
import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class Main extends JFrame { private float f = 1.0f; public static void main(String[] args) { Main m = new Main(); SwingUtilities.invokeLater(new Runnable() { @Override public void run() { m.init(); } }); } private void init(){ setSize(300, 300); setResizable(false); setUndecorated (true); setExtendedState(JFrame.MAXIMIZED_BOTH); setLayout(new SpringLayout()); add(new exitButton()); setVisible(true); } class exitButton extends JButton{ public exitButton(){ setText("Close"); setSize(25, 25); addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { Exit ex = new Exit(); ex.run(); } }); } } class Exit extends Thread{ public void run(){ try { while(f > 0f) { setOpacity(f); Thread.sleep(15); // время задержки f -= 0.03f; validate(); } System.exit(0); } catch (InterruptedException e) { System.out.println("Error: " + e); } } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д