/*
* MessageDemo2.java
*/
import java.awt.*;
import java.awt.event.*;
import java.beans.*;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import javax.swing.*;
public class MessageDemo2 extends JFrame {
private JLabel lb_InfoWindow = new JLabel();
private JPanel statusPanel = new JPanel();
private final Timer messageTimer;
private MessageDemo2 frame;
private JButton btStart = new JButton("try");
private int errorCount;
public MessageDemo2() {
super("MessageDemo2");
frame = this;
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setSize(600, 400);
setLocationRelativeTo(null);
JSeparator statusPanelSeparator = new JSeparator();
statusPanel.setLayout(new BorderLayout());
statusPanel.setPreferredSize(new Dimension(0, 90));
JPanel progressPanel = new JPanel();
statusPanel.add(statusPanelSeparator, BorderLayout.NORTH);
lb_InfoWindow.setOpaque(true);
statusPanel.add(lb_InfoWindow, BorderLayout.CENTER);
statusPanel.add(progressPanel, BorderLayout.EAST);
// status bar initialization - message timeout (_Sys.getTimerInfo())
messageTimer = new Timer(_Sys.getTimerInfo(), new ActionListener() {
public void actionPerformed(final ActionEvent e) {
// .. und nun wird nach der eingestellten Zeit (_Sys.getTimerInfo())
//die letzte Meldung mit einer Standardanzeige überschrieben
SimpleDateFormat fmt = new SimpleDateFormat();
fmt.applyPattern(" HH:mm:ss");
Calendar cal = Calendar.getInstance();
lb_InfoWindow.setBackground(_Sys.getBackground());
lb_InfoWindow.setForeground(Color.black);
lb_InfoWindow.setText("<html>" + "Um die Anzeigedauer der " +
"Meldungen zu ändern wählen Sie : " + "<br>" +
"--> Einstellungen --> Eigene Einstellungen" + "<br>" +
"oder die Tastenkombination Alt-U aus." + "<br> " + "" +
" " + "" + "<br>" + "<B>" + "letzte Meldung wurde " +
"automatisch nach " + (_Sys.getTimerInfo() / 1000) +
" Sekunden um : " + fmt.format(cal.getTime()) +
" Uhr gelöscht.</B/html>");
}
});
messageTimer.setRepeats(false);
// connecting action tasks to status bar
addPropertyChangeListener(new PropertyChangeListener() {
public void propertyChange(final PropertyChangeEvent evt) {
String propertyName = evt.getPropertyName();
if ("message".equals(propertyName)) {
Message msg = (Message) (evt.getNewValue());
lb_InfoWindow.setText(msg.getText());
messageTimer.restart();
}
}
});
add(statusPanel, BorderLayout.SOUTH);
add(btStart, BorderLayout.NORTH);
btStart.addActionListener(new ActionListener() {
public void actionPerformed(final ActionEvent e) {
//some code for testing only:
errorCount++;
setInfoText(0, "Error 0" + errorCount, "Error2", "Error3", "Error4", "extraText");
}
});
}
public void setInfoText(int errorClassification, String error1, String error2,
String error3, String error4, String extraText) {
SimpleDateFormat fmt = new SimpleDateFormat();
fmt.applyPattern(" HH:mm:ss");
Calendar cal = Calendar.getInstance();
// Hier beginnen die unterschiedlichen Formen der Fehlerdarstellung,
//anhand ihrer 'errorClassification'
Message msg = new Message();
if (errorClassification == 4) {
// Label wird formatiert
msg.setBackground(new Color(152, 251, 152));
msg.setForeground(Color.black);
msg.setText("<html>" + error1 + "<br>" + error2 + "<br>" +
error3 + "<br> " + error4 + " " + extraText + "<br>" + "<B>" +
"letzte Meldung um : " + fmt.format(cal.getTime()) + " Uhr </B/html>");
}
if (errorClassification == 3) {
msg.setForeground(Color.black);
msg.setBackground(new Color(255, 255, 0));
msg.setText("<html>" + error1 + "<br>" + error2 + "<br>" +
error3 + "<br> " + error4 + " " + extraText + "<br>" + "<B>" +
"letzte Meldung um : " + fmt.format(cal.getTime()) + " Uhr </B/html>");
}
if (errorClassification == 2) {
msg.setForeground(Color.white);
msg.setBackground(new Color(255, 48, 48));
msg.setText("<html>" + error1 + "<br>" + error2 + "<br>" +
error3 + "<br> " + error4 + " " + extraText + "<br>" + "<B>" +
"letzte Meldung um : " + fmt.format(cal.getTime()) + " Uhr </B/html>");
}
// Das passiert, wenn der Anwender per Doppelklick in das Label klickt.
if (errorClassification == 0) { // Textfeld wird auf NULL gesetzt (Standardwert)
msg.setText("<html>" + error1 + "<br>" + error2 + "<br>" +
error3 + "<br> " + error4 + " " + extraText + "<br>" + "<B>" +
"letzte Meldung wurde durch den Anwender um : " + fmt.format(cal.getTime()) +
" Uhr gelöscht.</B/html>");
}
frame.firePropertyChange("message", null, msg);
/* Es folgt das Speichern des aufgetretenen Fehlers. ,
*
* Achtung: die Zusammensetzung erfolgt in umgekehrter Reihenfolge.
* Dadurch kann der zuletzt ausgelöste Fehler an 1. Stelle dargestellt werden.
*/
_Error.addToErrorList("___________________________________________________" + "\n");
_Error.addToErrorList("Uhrzeit : " + fmt.format(cal.getTime()));
_Error.addToErrorList(extraText + "\n");
_Error.addToErrorList(error4 + "\n");
_Error.addToErrorList(error3 + "\n");
_Error.addToErrorList(error2 + "\n");
_Error.addToErrorList(error1 + "\n");
}
public static void main(final String args[]) {
EventQueue.invokeLater(new Runnable() {
public void run() {
new MessageDemo2().setVisible(true);
}
});
}
}
class Message {
private String text;
private Color background, foreground;
String getText() {
return text == null ? "" : text;
}
public void setText(String text) {
this.text = text;
}
public Color getBackground() {
return background == null ? Color.WHITE : background;
}
public void setBackground(Color background) {
this.background = background;
}
public Color getForeground() {
return foreground == null ? Color.BLACK : foreground;
}
public void setForeground(Color foreground) {
this.foreground = foreground;
}
}