/*
* FindBugs - Find Bugs in Java programs
* Copyright (C) 2003-2008 University of Maryland
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package edu.umd.cs.findbugs.gui2;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Container;
import java.awt.Font;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
import javax.annotation.CheckForNull;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;
/**
* @author pwilliam
*/
public class DisplayNonmodelMessage {
public static void main(String args[]) {
displayNonmodelMessage("Hello", "The quick brown fox jumped over the lazy dog", null, false);
}
static JFrame messageFrame;
static JTextArea messageTextArea;
static Font sourceFont = new Font("Monospaced", Font.PLAIN, (int)Driver.getFontSize());
public static void displayNonmodelMessage(String title, String message, @CheckForNull Component centerOver, boolean onTop) {
boolean positionWindow = false;
if (messageFrame == null) {
positionWindow = true;
messageFrame = new JFrame(title);
messageTextArea = new JTextArea(40, 80);
messageTextArea.setEditable(false);
messageTextArea.setLineWrap(true);
messageTextArea.setWrapStyleWord(true);
messageTextArea.setFont(sourceFont);
try {
messageFrame.setIconImage(ImageIO.read(MainFrame.class.getResource("smallBuggy.png")));
} catch (IOException e1) {
assert true; // ignore
}
Container contentPane = messageFrame.getContentPane();
contentPane.setLayout(new BorderLayout());
JScrollPane scrollPane = new JScrollPane(messageTextArea);
contentPane.add(scrollPane, BorderLayout.CENTER);
messageFrame.addWindowListener(new WindowAdapter(){
@Override
public void windowClosed(WindowEvent e) {
JFrame tmp = messageFrame;
messageFrame = null;
tmp.setVisible(false);
tmp.dispose();
}});
}
messageTextArea.setText(message);
messageFrame.setTitle(title);
messageFrame.pack();
if (positionWindow)
messageFrame.setLocationRelativeTo(centerOver);
messageFrame.setVisible(true);
messageFrame.toFront();
if (onTop) {
messageFrame.setAlwaysOnTop(true);
new Thread(clearAlwaysOnTopLater).start();
}
}
static void sleep(int seconds) {
try {
TimeUnit.SECONDS.sleep(seconds);
} catch (InterruptedException e) {
assert true;
}
}
static Runnable moveToFrontLater = new Runnable() {
public void run() {
sleep(5);
SwingUtilities.invokeLater(moveToFront);
}
};
static Runnable clearAlwaysOnTopLater = new Runnable() {
public void run() {
sleep(5);
SwingUtilities.invokeLater(clearAlwaysOnTop);
}
};
static Runnable moveToFront = new Runnable() {
public void run() {
JFrame frame = messageFrame;
if (frame != null)
frame.toFront();
}
};
static Runnable clearAlwaysOnTop = new Runnable() {
public void run() {
JFrame frame = messageFrame;
if (frame != null)
frame.setAlwaysOnTop(false);
}
};
}