/* * Copyright 2010-2015 Institut Pasteur. * * This file is part of Icy. * * Icy is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Icy is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Icy. If not, see <http://www.gnu.org/licenses/>. */ package icy.gui.frame; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.BoxLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JRootPane; import javax.swing.SwingConstants; import javax.swing.Timer; import javax.swing.border.BevelBorder; public class ExitFrame extends JFrame { /** * */ private static final long serialVersionUID = 5980838429118602985L; private JPanel buttonPanel; boolean forced; Timer timer; private JPanel forceQuitPanel; /** * Create the frame. */ public ExitFrame(int forceDelay) { super(); forced = false; timer = new Timer(forceDelay, new ActionListener() { @Override public void actionPerformed(ActionEvent e) { displayForcePanel(); } }); initialize(); // default forceQuitPanel.setVisible(false); buttonPanel.setVisible(false); if (forceDelay > 0) timer.start(); else if (forceDelay == 0) displayForcePanel(); getRootPane().setWindowDecorationStyle(JRootPane.NONE); // pack, center and display pack(); setLocationRelativeTo(null); setAlwaysOnTop(true); setVisible(true); } public ExitFrame() { this(-1); } public void displayForcePanel() { forceQuitPanel.setVisible(true); buttonPanel.setVisible(true); // pack and center pack(); setLocationRelativeTo(null); } public boolean isForced() { return forced; } void initialize() { setTitle("Exit"); setSize(new Dimension(400, 140)); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel panel_1 = new JPanel(); panel_1.setBorder(new BevelBorder(BevelBorder.RAISED, null, null, null, null)); getContentPane().add(panel_1, BorderLayout.CENTER); panel_1.setLayout(new BorderLayout(0, 0)); buttonPanel = new JPanel(); panel_1.add(buttonPanel, BorderLayout.SOUTH); JButton button = new JButton("Force Quit"); button.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { forced = true; // close frame dispose(); } }); button.setFont(new Font("Tahoma", Font.BOLD, 14)); buttonPanel.add(button); JPanel panel = new JPanel(); panel_1.add(panel, BorderLayout.CENTER); panel.setLayout(new BoxLayout(panel, BoxLayout.PAGE_AXIS)); JPanel panel_2 = new JPanel(); panel.add(panel_2); JLabel label = new JLabel("Please wait while exiting..."); panel_2.add(label); label.setHorizontalAlignment(SwingConstants.CENTER); label.setFont(new Font("Tahoma", Font.BOLD, 16)); forceQuitPanel = new JPanel(); panel.add(forceQuitPanel); JLabel forceQuitLabel = new JLabel("Click on 'Force Quit' to kill remaining tasks and exit."); forceQuitPanel.add(forceQuitLabel); forceQuitLabel.setFont(new Font("Tahoma", Font.PLAIN, 14)); forceQuitLabel.setHorizontalAlignment(SwingConstants.CENTER); } }