package pleocmd.itfc.gui.dse; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.util.Timer; import java.util.TimerTask; import javax.swing.BorderFactory; import javax.swing.JLabel; import javax.swing.JTextPane; import pleocmd.itfc.gui.dse.DataSequenceEditorPanel.FadeTimerTask; public class DataBlockField extends JTextPane implements UpdateErrorInterface { private static final long serialVersionUID = 6442009735721513493L; private static final Timer ERR_LBL_TIMER = new Timer("Error-Label Timer", true); private final JLabel errorLabel; private TimerTask errorLabelTimerTask; public DataBlockField(final String data, final int columns, final JLabel errorLabel) { super(); setPreferredSize(new Dimension(columns * getFontMetrics(getFont()).getMaxAdvance(), getPreferredSize().height)); this.errorLabel = errorLabel; final DataSequenceEditorKit kit = new DataSequenceEditorKit(this); setEditorKitForContentType("text/datasequence", kit); setContentType("text/datasequence"); setFont(getFont().deriveFont(Font.BOLD)); setText(data); errorLabel.setForeground(Color.RED); setBorder(BorderFactory.createEtchedBorder()); } @Override public void updateErrorLabel(final String text) { if (errorLabel == null) return; if (text.equals(errorLabel.getText())) return; errorLabel.setText(text); Color.RGBtoHSB(255, 0, 0, null); final Color src = Color.RED; final Color trg = errorLabel.getBackground(); errorLabel.setForeground(src); if (errorLabelTimerTask != null) errorLabelTimerTask.cancel(); errorLabelTimerTask = new FadeTimerTask(errorLabel, src.getRed(), src.getGreen(), src.getBlue(), trg.getRed(), trg.getGreen(), trg.getBlue()); ERR_LBL_TIMER.schedule(errorLabelTimerTask, 1000, 100); } }