⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 basiccomboboxui.java

📁 java jdk 1.4的源码
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
/* * @(#)BasicComboBoxUI.java	1.155 03/01/23 * * Copyright 2003 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */package javax.swing.plaf.basic;import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.accessibility.*;import javax.swing.FocusManager;import javax.swing.plaf.*;import javax.swing.border.*;import javax.swing.text.*;import javax.swing.event.*;import java.beans.PropertyChangeListener;import java.beans.PropertyChangeEvent;import sun.awt.AppContext;/** * Basic UI implementation for JComboBox.  * <p> * The combo box is a compound component which means that it is an agregate of * many simpler components. This class creates and manages the listeners * on the combo box and the combo box model. These listeners update the user  * interface in response to changes in the properties and state of the combo box. * <p> * All event handling is handled by listener classes created with the  * <code>createxxxListener()</code> methods and internal classes. * You can change the behavior of this class by overriding the * <code>createxxxListener()</code> methods and supplying your own * event listeners or subclassing from the ones supplied in this class. * <p> * For adding specific actions,  * overide <code>installKeyboardActions</code> to add actions in response to * KeyStroke bindings. See the article <a href="http://java.sun.com/products/jfc/tsc/special_report/kestrel/keybindings.html">Keyboard Bindings in Swing</a> * at <a href="http://java.sun.com/products/jfc/tsc"><em>The Swing Connection</em></a>. * * @version 1.155 01/23/03 * @author Arnaud Weber * @author Tom Santos * @author Mark Davidson */public class BasicComboBoxUI extends ComboBoxUI {    protected JComboBox comboBox;    /**     * This protected field is implementation specific. Do not access directly     * or override.      */    protected boolean   hasFocus = false;    // Control the selection behavior of the JComboBox when it is used    // in the JTable DefaultCellEditor.     private boolean isTableCellEditor = false;    private static final String IS_TABLE_CELL_EDITOR = "JComboBox.isTableCellEditor";    // This list is for drawing the current item in the combo box.    protected JList   listBox;    // Used to render the currently selected item in the combo box.    // It doesn't have anything to do with the popup's rendering.    protected CellRendererPane currentValuePane = new CellRendererPane();    // The implementation of ComboPopup that is used to show the popup.    protected ComboPopup popup;    // The Component that the ComboBoxEditor uses for editing    protected Component editor;    // The arrow button that invokes the popup.    protected JButton   arrowButton;    // Listeners that are attached to the JComboBox    /**     * This protected field is implementation specific. Do not access directly     * or override. Override the listener construction method instead.     *     * @see #createKeyListener     */    protected KeyListener keyListener;    /**     * This protected field is implementation specific. Do not access directly     * or override. Override the listener construction method instead.     *     * @see #createFocusListener     */    protected FocusListener focusListener;    /**     * This protected field is implementation specific. Do not access directly     * or override. Override the listener construction method instead.     *     * @see #createPropertyChangeListener     */    protected PropertyChangeListener propertyChangeListener;    private FocusListener editorFocusListener;    private ActionListener editorActionListener;    /**     * This protected field is implementation specific. Do not access directly     * or override. Override the listener construction method instead.     *     * @see #createItemListener     */    protected ItemListener itemListener;    // Listeners that the ComboPopup produces.    protected MouseListener popupMouseListener;    protected MouseMotionListener popupMouseMotionListener;    protected KeyListener popupKeyListener;    // This is used for knowing when to cache the minimum preferred size.    // If the data in the list changes, the cached value get marked for recalc.    // Added to the current JComboBox model    /**     * This protected field is implementation specific. Do not access directly     * or override. Override the listener construction method instead.     *     * @see #createListDataListener     */    protected ListDataListener listDataListener;    // Flag for recalculating the minimum preferred size.    protected boolean isMinimumSizeDirty = true;    // Cached minimum preferred size.    protected Dimension cachedMinimumSize = new Dimension( 0, 0 );    // Flag for calculating the display size    private boolean isDisplaySizeDirty = true;        // Cached the size that the display needs to render the largest item    private Dimension cachedDisplaySize = new Dimension( 0, 0 );    // Key used for lookup of the DefaultListCellRenderer in the AppContext.    private static final Object COMBO_UI_LIST_CELL_RENDERER_KEY =                        new StringBuffer("DefaultListCellRendererKey");    // Used for calculating the default size.    private static ListCellRenderer getDefaultListCellRenderer() {        ListCellRenderer renderer = (ListCellRenderer)AppContext.                         getAppContext().get(COMBO_UI_LIST_CELL_RENDERER_KEY);        if (renderer == null) {            renderer = new DefaultListCellRenderer();            AppContext.getAppContext().put(COMBO_UI_LIST_CELL_RENDERER_KEY,                                           new DefaultListCellRenderer());        }        return renderer;    }    //========================    // begin UI Initialization    //    public static ComponentUI createUI(JComponent c) {        return new BasicComboBoxUI();    }    public void installUI( JComponent c ) {        isMinimumSizeDirty = true;        comboBox = (JComboBox)c;        installDefaults();        popup = createPopup();        listBox = popup.getList();	// Is this combo box a cell editor?        Boolean inTable = (Boolean)c.getClientProperty(IS_TABLE_CELL_EDITOR );	if (inTable != null) {	    isTableCellEditor = inTable.equals(Boolean.TRUE) ? true : false;	}        if ( comboBox.getRenderer() == null || comboBox.getRenderer() instanceof UIResource ) {            comboBox.setRenderer( createRenderer() );        }        if ( comboBox.getEditor() == null || comboBox.getEditor() instanceof UIResource ) {            comboBox.setEditor( createEditor() );        }        installListeners();        installComponents();        comboBox.setLayout( createLayoutManager() );        comboBox.setRequestFocusEnabled( true );	installKeyboardActions();    }    public void uninstallUI( JComponent c ) {        setPopupVisible( comboBox, false);        popup.uninstallingUI();        uninstallKeyboardActions();        comboBox.setLayout( null );        uninstallComponents();        uninstallListeners();        uninstallDefaults();        if ( comboBox.getRenderer() == null || comboBox.getRenderer() instanceof UIResource ) {            comboBox.setRenderer( null );        }        if ( comboBox.getEditor() == null || comboBox.getEditor() instanceof UIResource ) {            comboBox.setEditor( null );        }        keyListener = null;        focusListener = null;        listDataListener = null;        propertyChangeListener = null;	editorActionListener = null;	editorFocusListener = null;        popup = null;        listBox = null;        comboBox = null;    }    /**     * Installs the default colors, default font, default renderer, and default     * editor into the JComboBox.     */    protected void installDefaults() {        LookAndFeel.installColorsAndFont( comboBox,                                          "ComboBox.background",                                          "ComboBox.foreground",                                          "ComboBox.font" );        LookAndFeel.installBorder( comboBox, "ComboBox.border" );    }    /**     * Create and install the listeners for the combo box and its model.     * This method is called when the UI is installed.     */    protected void installListeners() {	if ( (itemListener = createItemListener()) != null) {	    comboBox.addItemListener( itemListener );	}        if ( (propertyChangeListener = createPropertyChangeListener()) != null ) {            comboBox.addPropertyChangeListener( propertyChangeListener );        }        if ( (keyListener = createKeyListener()) != null ) {            comboBox.addKeyListener( keyListener );        }        if ( (focusListener = createFocusListener()) != null ) {            comboBox.addFocusListener( focusListener );        }	if ((popupMouseListener = popup.getMouseListener()) != null) {	    comboBox.addMouseListener( popupMouseListener );	}	if ((popupMouseMotionListener = popup.getMouseMotionListener()) != null) {	    comboBox.addMouseMotionListener( popupMouseMotionListener );	}	if ((popupKeyListener = popup.getKeyListener()) != null) {	    comboBox.addKeyListener(popupKeyListener);	}        if ( comboBox.getModel() != null ) {            if ( (listDataListener = createListDataListener()) != null ) {                comboBox.getModel().addListDataListener( listDataListener );            }        }    }    /**     * Uninstalls the default colors, default font, default renderer, and default     * editor into the JComboBox.     */    protected void uninstallDefaults() {        LookAndFeel.installColorsAndFont( comboBox,                                          "ComboBox.background",                                          "ComboBox.foreground",                                          "ComboBox.font" );        LookAndFeel.uninstallBorder( comboBox );    }    /**     * Remove the installed listeners from the combo box and its model.     * The number and types of listeners removed and in this method should be     * the same that was added in <code>installListeners</code>     */    protected void uninstallListeners() {        if ( keyListener != null ) {            comboBox.removeKeyListener( keyListener );        }	if ( itemListener != null) {	    comboBox.removeItemListener( itemListener );	}        if ( propertyChangeListener != null ) {            comboBox.removePropertyChangeListener( propertyChangeListener );        }        if ( focusListener != null) {            comboBox.removeFocusListener( focusListener );        }	if ( popupMouseListener != null) {	    comboBox.removeMouseListener( popupMouseListener );	}	if ( popupMouseMotionListener != null) {	    comboBox.removeMouseMotionListener( popupMouseMotionListener );	}	if (popupKeyListener != null) {	    comboBox.removeKeyListener(popupKeyListener);	}        if ( comboBox.getModel() != null ) {            if ( listDataListener != null ) {                comboBox.getModel().removeListDataListener( listDataListener );            }        }    }    /**     * Creates the popup portion of the combo box.     *     * @return an instance of <code>ComboPopup</code>     * @see ComboPopup     */    protected ComboPopup createPopup() {        BasicComboPopup popup = new BasicComboPopup( comboBox );        popup.getAccessibleContext().setAccessibleParent(comboBox);        return popup;    }    /**     * Creates a <code>KeyListener</code> which will be added to the     * combo box. If this method returns null then it will not be added     * to the combo box.     *      * @return an instance <code>KeyListener</code> or null     */    protected KeyListener createKeyListener() {        return new KeyHandler();    }     /**     * Creates a <code>FocusListener</code> which will be added to the combo box.     * If this method returns null then it will not be added to the combo box.     *     * @return an instance of a <code>FocusListener</code> or null     */    protected FocusListener createFocusListener() {        return new FocusHandler();    }    /**     * Creates a list data listener which will be added to the     * <code>ComboBoxModel</code>. If this method returns null then     * it will not be added to the combo box model.     *     * @return an instance of a <code>ListDataListener</code> or null     */    protected ListDataListener createListDataListener() {        return new ListDataHandler();    }    /**     * Creates an <code>ItemListener</code> which will be added to the      * combo box. If this method returns null then it will not      * be added to the combo box.     * <p>     * Subclasses may override this method to return instances of their own     * ItemEvent handlers.     *     * @return an instance of an <code>ItemListener</code> or null     */    protected ItemListener createItemListener() {        return null;    }    /**     * Creates a <code>PropertyChangeListener</code> which will be added to     * the combo box. If this method returns null then it will not     * be added to the combo box.     *      * @return an instance of a <code>PropertyChangeListener</code> or null     */    protected PropertyChangeListener createPropertyChangeListener() {        return new PropertyChangeHandler();    }    /**     * Creates a layout manager for managing the components which make up the      * combo box.     *      * @return an instance of a layout manager     */    protected LayoutManager createLayoutManager() {        return new ComboBoxLayoutManager();    }    /**     * Creates the default renderer that will be used in a non-editiable combo      * box. A default renderer will used only if a renderer has not been 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -