package com.swingsane.business.notification; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import java.awt.Dimension; import java.awt.Font; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import javax.swing.JDialog; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JProgressBar; import javax.swing.SwingUtilities; import javax.swing.WindowConstants; import javax.swing.border.CompoundBorder; import javax.swing.border.EmptyBorder; import javax.swing.border.LineBorder; /** * @author Roland Quast (roland@formreturn.com) * */ @SuppressWarnings("serial") public class DialogNotificationImpl extends JDialog implements INotification { private final JPanel contentPanel = new JPanel(); private JLabel messageLabel; private JProgressBar progressBar; private boolean interrupted = false; private Exception exception; public DialogNotificationImpl(Component parent) { init(); pack(); setLocationRelativeTo(parent); } @Override public void addAbortListener() { } @Override public final Exception getException() { return exception; } private void init() { setPreferredSize(new Dimension(400, 100)); setFocusTraversalKeysEnabled(false); setFocusCycleRoot(false); setFocusableWindowState(false); setFocusable(false); setName("notificationDialog"); setSize(new Dimension(400, 100)); setUndecorated(true); setMinimumSize(new Dimension(400, 100)); setAlwaysOnTop(true); setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE); setModalityType(ModalityType.DOCUMENT_MODAL); setBounds(100, 100, 450, 300); getContentPane().setLayout(new BorderLayout()); contentPanel.setBackground(Color.WHITE); contentPanel.setBorder(new CompoundBorder(new LineBorder(new Color(0, 0, 0)), new EmptyBorder( 5, 5, 5, 5))); getContentPane().add(contentPanel, BorderLayout.CENTER); GridBagLayout gbl_contentPanel = new GridBagLayout(); gbl_contentPanel.columnWidths = new int[] { 0, 0 }; gbl_contentPanel.rowHeights = new int[] { 0, 0, 0, 0, 0 }; gbl_contentPanel.columnWeights = new double[] { 1.0, Double.MIN_VALUE }; gbl_contentPanel.rowWeights = new double[] { 1.0, 0.0, 0.0, 1.0, Double.MIN_VALUE }; contentPanel.setLayout(gbl_contentPanel); messageLabel = new JLabel("MESSAGE"); messageLabel.setFont(new Font("Dialog", Font.PLAIN, 9)); GridBagConstraints gbc_messageLabel = new GridBagConstraints(); gbc_messageLabel.insets = new Insets(0, 0, 5, 0); gbc_messageLabel.gridx = 0; gbc_messageLabel.gridy = 1; contentPanel.add(messageLabel, gbc_messageLabel); progressBar = new JProgressBar(); progressBar.setIndeterminate(true); GridBagConstraints gbc_progressBar = new GridBagConstraints(); gbc_progressBar.insets = new Insets(0, 0, 5, 0); gbc_progressBar.gridx = 0; gbc_progressBar.gridy = 2; contentPanel.add(progressBar, gbc_progressBar); } @Override public final boolean isInterrupted() { return interrupted; } @Override public final void message(final String message) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { messageLabel.setText(message); } }); } @Override public final void setException(Exception exception) { this.exception = exception; } @Override public final void setInterrupted(boolean interrupted) { this.interrupted = interrupted; } }