/* * Beanfabrics Framework Copyright (C) by Michael Karneim, beanfabrics.org * Use is subject to license terms. See license.txt. */ package org.beanfabrics.swing.customizer; import java.awt.BorderLayout; import java.awt.Color; import java.io.PrintWriter; import java.io.StringWriter; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import org.beanfabrics.swing.customizer.util.CustomizerUtil; import org.beanfabrics.swing.customizer.util.RootWindowLocator; /** * The <code>CustomizerBasePanel</code> is the base class for JavaBeans Customizers in Beanfabrics. It provides methods * for showing messages on the customizer's panel. * * @author Michael Karneim */ @SuppressWarnings("serial") public class CustomizerBasePanel<PM extends CustomizerPM> extends JPanel implements CustomizerBase { private Object bean; private PM pModel; public CustomizerBasePanel(PM aPm) { this.pModel = aPm; this.pModel.getContext().addService(RootWindowLocator.class, CustomizerUtil.getRootWindowLocator(this)); } @Override public void setObject(Object bean) { this.bean = bean; try { this.pModel.setCustomizer(this); } catch (Throwable t) { showException(t); } } @Override public Object getObject() { return bean; } public void showMessage(String message) { removeAll(); JTextArea ta = new JTextArea(message); ta.setForeground(Color.red); ta.setEditable(false); JScrollPane scroll = new JScrollPane(ta); setLayout(new BorderLayout()); add(scroll, BorderLayout.CENTER); } public void showException(Throwable t) { StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); pw.println("Caught " + t.getClass().getName() + ": '" + t.getMessage() + "'"); t.printStackTrace(pw); showMessage(sw.toString()); } @Override public void firePropertyChange(String propertyName, Object oldValue, Object newValue) { super.firePropertyChange(propertyName, oldValue, newValue); } }