basictipofthedayui.java
来自「java实现浏览器等本地桌面的功能」· Java 代码 · 共 368 行
JAVA
368 行
/* * $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(); } } }
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?