BasicTipOfTheDayUI.java
资源名称:swingx.zip [点击查看]
上传用户:zhengdagz
上传日期:2014-03-06
资源大小:1956k
文件大小:11k
源码类别:
xml/soap/webservice
开发平台:
Java
- /*
- * $Id: BasicTipOfTheDayUI.java,v 1.4 2005/10/10 18:02:53 rbair Exp $
- *
- * Copyright 2004 Sun Microsystems, Inc., 4150 Network Circle,
- * Santa Clara, California 95054, U.S.A. All rights reserved.
- *
- * 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
- package org.jdesktop.swingx.plaf.basic;
- import java.awt.BorderLayout;
- import java.awt.Component;
- import java.awt.Dialog;
- import java.awt.Dimension;
- import java.awt.Font;
- import java.awt.Frame;
- import java.awt.GridLayout;
- import java.awt.Window;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- import java.awt.event.KeyEvent;
- import java.awt.event.WindowAdapter;
- import java.awt.event.WindowEvent;
- import java.beans.PropertyChangeEvent;
- import java.beans.PropertyChangeListener;
- import javax.swing.AbstractAction;
- import javax.swing.ActionMap;
- import javax.swing.BorderFactory;
- import javax.swing.Icon;
- import javax.swing.JButton;
- import javax.swing.JCheckBox;
- import javax.swing.JComponent;
- import javax.swing.JDialog;
- import javax.swing.JEditorPane;
- import javax.swing.JLabel;
- import javax.swing.JOptionPane;
- import javax.swing.JPanel;
- import javax.swing.JScrollPane;
- import javax.swing.JTextArea;
- import javax.swing.KeyStroke;
- import javax.swing.LookAndFeel;
- import javax.swing.SwingUtilities;
- import javax.swing.UIManager;
- import javax.swing.plaf.ActionMapUIResource;
- import javax.swing.plaf.ComponentUI;
- import org.jdesktop.swingx.JXTipOfTheDay;
- import org.jdesktop.swingx.JXTipOfTheDay.ShowOnStartupChoice;
- import org.jdesktop.swingx.plaf.TipOfTheDayUI;
- import org.jdesktop.swingx.tips.TipOfTheDayModel.Tip;
- import org.jdesktop.swingx.util.UIManagerUtils;
- /**
- * Base implementation of the <code>JXTipOfTheDay</code> UI.
- *
- * @author <a href="mailto:fred@L2FProd.com">Frederic Lavigne</a>
- */
- public class BasicTipOfTheDayUI extends TipOfTheDayUI {
- public static ComponentUI createUI(JComponent c) {
- return new BasicTipOfTheDayUI((JXTipOfTheDay)c);
- }
- protected JXTipOfTheDay tipPane;
- protected JPanel tipArea;
- protected Component currentTipComponent;
- protected Font tipFont;
- protected PropertyChangeListener changeListener;
- public BasicTipOfTheDayUI(JXTipOfTheDay tipPane) {
- this.tipPane = tipPane;
- }
- @Override
- public JDialog createDialog(Component parentComponent,
- final ShowOnStartupChoice choice) {
- return createDialog(parentComponent, choice, true);
- }
- protected JDialog createDialog(Component parentComponent,
- final ShowOnStartupChoice choice,
- boolean showPreviousButton) {
- String title = UIManager.getString("TipOfTheDay.dialogTitle");
- final JDialog dialog;
- Window window;
- if (parentComponent == null) {
- window = JOptionPane.getRootFrame();
- } else {
- window = (parentComponent instanceof Window)?(Window)parentComponent
- :SwingUtilities.getWindowAncestor(parentComponent);
- }
- if (window instanceof Frame) {
- dialog = new JDialog((Frame)window, title, true);
- } else {
- dialog = new JDialog((Dialog)window, title, true);
- }
- dialog.getContentPane().setLayout(new BorderLayout(10, 10));
- dialog.getContentPane().add(tipPane, BorderLayout.CENTER);
- ((JComponent)dialog.getContentPane()).setBorder(BorderFactory
- .createEmptyBorder(10, 10, 10, 10));
- final JCheckBox showOnStartupBox;
- // tip controls
- JPanel controls = new JPanel(new BorderLayout());
- dialog.add("South", controls);
- if (choice != null) {
- showOnStartupBox = new JCheckBox(UIManager
- .getString("TipOfTheDay.showOnStartupText"), choice
- .isShowingOnStartup());
- controls.add(showOnStartupBox, BorderLayout.CENTER);
- } else {
- showOnStartupBox = null;
- }
- JPanel buttons =
- new JPanel(new GridLayout(1, showPreviousButton?3:2, 9, 0));
- controls.add(buttons, BorderLayout.LINE_END);
- if (showPreviousButton) {
- JButton previousTipButton = new JButton(UIManager
- .getString("TipOfTheDay.previousTipText"));
- buttons.add(previousTipButton);
- previousTipButton.addActionListener(getActionMap().get("previousTip"));
- }
- JButton nextTipButton = new JButton(UIManager
- .getString("TipOfTheDay.nextTipText"));
- buttons.add(nextTipButton);
- nextTipButton.addActionListener(getActionMap().get("nextTip"));
- JButton closeButton = new JButton(UIManager
- .getString("TipOfTheDay.closeText"));
- buttons.add(closeButton);
- final ActionListener saveChoice = new ActionListener() {
- public void actionPerformed(ActionEvent e) {
- if (choice != null) {
- choice.setShowingOnStartup(showOnStartupBox.isSelected());
- }
- dialog.setVisible(false);
- }
- };
- closeButton.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e) {
- dialog.setVisible(false);
- saveChoice.actionPerformed(null);
- }
- });
- dialog.getRootPane().setDefaultButton(closeButton);
- dialog.addWindowListener(new WindowAdapter() {
- public void windowClosing(WindowEvent e) {
- saveChoice.actionPerformed(null);
- }
- });
- ((JComponent)dialog.getContentPane()).registerKeyboardAction(saveChoice,
- KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0),
- JComponent.WHEN_IN_FOCUSED_WINDOW);
- dialog.pack();
- dialog.setLocationRelativeTo(parentComponent);
- return dialog;
- }
- @Override
- public void installUI(JComponent c) {
- super.installUI(c);
- installDefaults();
- installKeyboardActions();
- installComponents();
- installListeners();
- showCurrentTip();
- }
- protected void installKeyboardActions() {
- ActionMap map = getActionMap();
- if (map != null) {
- SwingUtilities.replaceUIActionMap(tipPane, map);
- }
- }
- ActionMap getActionMap() {
- ActionMap map = new ActionMapUIResource();
- map.put("previousTip", new PreviousTipAction());
- map.put("nextTip", new NextTipAction());
- return map;
- }
- protected void installListeners() {
- changeListener = createChangeListener();
- tipPane.addPropertyChangeListener(changeListener);
- }
- protected PropertyChangeListener createChangeListener() {
- return new ChangeListener();
- }
- protected void installDefaults() {
- LookAndFeel.installColorsAndFont(tipPane, "TipOfTheDay.background",
- "TipOfTheDay.foreground", "TipOfTheDay.font");
- LookAndFeel.installBorder(tipPane, "TipOfTheDay.border");
- tipFont = UIManager.getFont("TipOfTheDay.tipFont");
- tipPane.setOpaque(true);
- }
- protected void installComponents() {
- tipPane.setLayout(new BorderLayout());
- // tip icon
- JLabel tipIcon = new JLabel(UIManager
- .getString("TipOfTheDay.didYouKnowText"));
- tipIcon.setIcon(UIManager.getIcon("TipOfTheDay.icon"));
- tipIcon.setBorder(BorderFactory.createEmptyBorder(22, 15, 22, 15));
- tipPane.add("North", tipIcon);
- // tip area
- tipArea = new JPanel(new BorderLayout(2, 2));
- tipArea.setOpaque(false);
- tipArea.setBorder(BorderFactory.createEmptyBorder(4, 4, 4, 4));
- tipPane.add("Center", tipArea);
- }
- @Override
- public Dimension getPreferredSize(JComponent c) {
- return new Dimension(420, 175);
- }
- protected void showCurrentTip() {
- if (currentTipComponent != null) {
- tipArea.remove(currentTipComponent);
- }
- int currentTip = tipPane.getCurrentTip();
- if (currentTip == -1) {
- JLabel label = new JLabel();
- label.setOpaque(true);
- label.setBackground(UIManager.getColor("TextArea.background"));
- currentTipComponent = label;
- tipArea.add("Center", currentTipComponent);
- return;
- }
- // tip does not fall in current tip range
- if (tipPane.getModel() == null || tipPane.getModel().getTipCount() == 0
- || (currentTip < 0 && currentTip >= tipPane.getModel().getTipCount())) {
- currentTipComponent = new JLabel();
- } else {
- Tip tip = tipPane.getModel().getTipAt(currentTip);
- Object tipObject = tip.getTip();
- if (tipObject instanceof Component) {
- currentTipComponent = (Component)tipObject;
- } else if (tipObject instanceof Icon) {
- currentTipComponent = new JLabel((Icon)tipObject);
- } else {
- JScrollPane tipScroll = new JScrollPane();
- tipScroll.setBorder(null);
- tipScroll.setOpaque(false);
- tipScroll.getViewport().setOpaque(false);
- tipScroll.setBorder(null);
- String text = tipObject == null?"":tipObject.toString();
- if (text.toLowerCase().startsWith("<html>")) {
- JEditorPane editor = new JEditorPane("text/html", text);
- UIManagerUtils.htmlize(editor, tipPane.getFont());
- editor.setEditable(false);
- editor.setBorder(null);
- editor.setMargin(null);
- editor.setOpaque(false);
- tipScroll.getViewport().setView(editor);
- } else {
- JTextArea area = new JTextArea(text);
- area.setFont(tipPane.getFont());
- area.setEditable(false);
- area.setLineWrap(true);
- area.setWrapStyleWord(true);
- area.setBorder(null);
- area.setMargin(null);
- area.setOpaque(false);
- tipScroll.getViewport().setView(area);
- }
- currentTipComponent = tipScroll;
- }
- }
- tipArea.add("Center", currentTipComponent);
- tipArea.revalidate();
- tipArea.repaint();
- }
- @Override
- public void uninstallUI(JComponent c) {
- uninstallListeners();
- uninstallComponents();
- uninstallDefaults();
- super.uninstallUI(c);
- }
- protected void uninstallListeners() {
- tipPane.removePropertyChangeListener(changeListener);
- }
- protected void uninstallComponents() {}
- protected void uninstallDefaults() {}
- class ChangeListener implements PropertyChangeListener {
- public void propertyChange(PropertyChangeEvent evt) {
- if (JXTipOfTheDay.CURRENT_TIP_CHANGED_KEY.equals(evt.getPropertyName())) {
- showCurrentTip();
- }
- }
- }
- class PreviousTipAction extends AbstractAction {
- public PreviousTipAction() {
- super("previousTip");
- }
- public void actionPerformed(ActionEvent e) {
- tipPane.previousTip();
- }
- @Override
- public boolean isEnabled() {
- return tipPane.isEnabled();
- }
- }
- class NextTipAction extends AbstractAction {
- public NextTipAction() {
- super("nextTip");
- }
- public void actionPerformed(ActionEvent e) {
- tipPane.nextTip();
- }
- @Override
- public boolean isEnabled() {
- return tipPane.isEnabled();
- }
- }
- }