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

📄 synthtabbedpaneui.java

📁 Mobile 应用程序使用 Java Micro Edition (Java ME) 平台
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
/* * @(#)SynthTabbedPaneUI.java	1.42 08/01/28 * * Copyright 2006 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */package javax.swing.plaf.synth;import javax.swing.*;import javax.swing.event.*;import javax.swing.plaf.*;import javax.swing.plaf.basic.*;import javax.swing.text.View;import java.awt.*;import java.awt.event.*;import java.beans.PropertyChangeListener;import java.beans.PropertyChangeEvent;import sun.swing.plaf.synth.SynthUI;import sun.swing.SwingUtilities2;/** * A Synth L&F implementation of TabbedPaneUI. * * @version 1.42, 01/28/08 * @author Scott Violet *//** * Looks up 'selectedTabPadInsets' from the Style, which will be additional * insets for the selected tab. */class SynthTabbedPaneUI extends BasicTabbedPaneUI implements SynthUI, PropertyChangeListener  {    /**     * <p>If non-zero, tabOverlap indicates the amount that the tab bounds     * should be altered such that they would overlap with a tab on either the     * leading or trailing end of a run (ie: in TOP, this would be on the left     * or right).</p>     *      * <p>A positive overlap indicates that tabs should overlap right/down,     * while a negative overlap indicates tha tabs should overlap left/up.</p>     *      * <p>When tabOverlap is specified, it both changes the x position and width     * of the tab if in TOP or BOTTOM placement, and changes the y position and     * height if in LEFT or RIGHT placement.</p>     *      * <p>This is done for the following reason. Consider a run of 10 tabs.     * There are 9 gaps between these tabs. If you specified a tabOverlap of     * "-1", then each of the tabs "x" values will be shifted left. This leaves     * 9 pixels of space to the right of the right-most tab unpainted. So, each     * tab's width is also extended by 1 pixel to make up the difference.</p>     *      * <p>This property respects the RTL component orientation.</p>     */    private int tabOverlap = 0;        /**     * When a tabbed pane has multiple rows of tabs, this indicates whether     * the tabs in the upper row(s) should extend to the base of the tab area,     * or whether they should remain at their normal tab height. This does not     * affect the bounds of the tabs, only the bounds of area painted by the     * tabs. The text position does not change. The result is that the bottom     * border of the upper row of tabs becomes fully obscured by the lower tabs,     * resulting in a cleaner look.     */    private boolean extendTabsToBase = false;        private SynthContext tabAreaContext;    private SynthContext tabContext;    private SynthContext tabContentContext;    private SynthStyle style;    private SynthStyle tabStyle;    private SynthStyle tabAreaStyle;    private SynthStyle tabContentStyle;    private Rectangle textRect;    private Rectangle iconRect;        private Rectangle tabAreaBounds = new Rectangle();    //added for the Nimbus look and feel, where the tab area is painted differently depending on the    //state for the selected tab    private boolean tabAreaStatesMatchSelectedTab = false;    //added for the Nimbus LAF to ensure that the labels don't move whether the tab is selected or not    private boolean nudgeSelectedLabel = true;    private boolean selectedTabIsPressed = false;    public static ComponentUI createUI(JComponent c) {        return new SynthTabbedPaneUI();    }    SynthTabbedPaneUI() {        textRect = new Rectangle();        iconRect = new Rectangle();    }    private boolean scrollableTabLayoutEnabled() {	return (tabPane.getTabLayoutPolicy() == JTabbedPane.SCROLL_TAB_LAYOUT);    }    protected void installDefaults() {        updateStyle(tabPane);    }    private void updateStyle(JTabbedPane c) {        SynthContext context = getContext(c, ENABLED);        SynthStyle oldStyle = style;        style = SynthLookAndFeel.updateStyle(context, this);        // Add properties other than JComponent colors, Borders and        // opacity settings here:        if (style != oldStyle) {            tabRunOverlay =                style.getInt(context, "TabbedPane.tabRunOverlay", 0);            tabOverlap = style.getInt(context, "TabbedPane.tabOverlap", 0);            extendTabsToBase = style.getBoolean(context,                    "TabbedPane.extendTabsToBase", false);            textIconGap = style.getInt(context, "TabbedPane.textIconGap", 0);            selectedTabPadInsets = (Insets)style.get(context,                    "TabbedPane.selectedTabPadInsets");            if (selectedTabPadInsets == null) {                selectedTabPadInsets = new Insets(0, 0, 0, 0);            }            tabAreaStatesMatchSelectedTab = style.getBoolean(context,                     "TabbedPane.tabAreaStatesMatchSelectedTab", false);            nudgeSelectedLabel = style.getBoolean(context,                    "TabbedPane.nudgeSelectedLabel", true);            if (oldStyle != null) {                uninstallKeyboardActions();                installKeyboardActions();            }        }        context.dispose();        if (tabContext != null) {            tabContext.dispose();        }        tabContext = getContext(c, Region.TABBED_PANE_TAB, ENABLED);        this.tabStyle = SynthLookAndFeel.updateStyle(tabContext, this);        tabInsets = tabStyle.getInsets(tabContext, null);        if (tabAreaContext != null) {            tabAreaContext.dispose();        }        tabAreaContext = getContext(c, Region.TABBED_PANE_TAB_AREA, ENABLED);        this.tabAreaStyle = SynthLookAndFeel.updateStyle(tabAreaContext, this);        tabAreaInsets = tabAreaStyle.getInsets(tabAreaContext, null);        if (tabContentContext != null) {            tabContentContext.dispose();        }        tabContentContext = getContext(c, Region.TABBED_PANE_CONTENT, ENABLED);        this.tabContentStyle = SynthLookAndFeel.updateStyle(tabContentContext,                                                            this);        contentBorderInsets =            tabContentStyle.getInsets(tabContentContext, null);    }    protected void installListeners() {        super.installListeners();        tabPane.addPropertyChangeListener(this);    }        protected void uninstallListeners() {        super.uninstallListeners();        tabPane.removePropertyChangeListener(this);    }    protected void uninstallDefaults() {        SynthContext context = getContext(tabPane, ENABLED);        style.uninstallDefaults(context);        context.dispose();        style = null;        tabStyle.uninstallDefaults(tabContext);        tabContext.dispose();        tabContext = null;        tabStyle = null;        tabAreaStyle.uninstallDefaults(tabAreaContext);        tabAreaContext.dispose();        tabAreaContext = null;        tabAreaStyle = null;        tabContentStyle.uninstallDefaults(tabContentContext);        tabContentContext.dispose();        tabContentContext = null;        tabContentStyle = null;    }    public SynthContext getContext(JComponent c) {        return getContext(c, getComponentState(c));    }    public SynthContext getContext(JComponent c, int state) {        return SynthContext.getContext(SynthContext.class, c,                    SynthLookAndFeel.getRegion(c),style, state);    }    public SynthContext getContext(JComponent c, Region subregion) {        return getContext(c, subregion, getComponentState(c));    }    private SynthContext getContext(JComponent c, Region subregion, int state){        SynthStyle style = null;        Class klass = SynthContext.class;        if (subregion == Region.TABBED_PANE_TAB) {            style = tabStyle;        }        else if (subregion == Region.TABBED_PANE_TAB_AREA) {            style = tabAreaStyle;        }        else if (subregion == Region.TABBED_PANE_CONTENT) {            style = tabContentStyle;        }        return SynthContext.getContext(klass, c, subregion, style, state);    }    private Region getRegion(JComponent c) {        return SynthLookAndFeel.getRegion(c);    }    private int getComponentState(JComponent c) {        return SynthLookAndFeel.getComponentState(c);    }    protected JButton createScrollButton(int direction) {        // added for Nimbus LAF so that it can use the basic arrow buttons        // UIManager is queried directly here because this is called before        // updateStyle is called so the style can not be queried directly        if (UIManager.getBoolean("TabbedPane.useBasicArrows")) {            JButton btn = super.createScrollButton(direction);            btn.setBorder(BorderFactory.createEmptyBorder());            return btn;        }        return new SynthScrollableTabButton(direction);    }    public void propertyChange(PropertyChangeEvent e) {        if (SynthLookAndFeel.shouldUpdateStyle(e)) {            updateStyle(tabPane);        }    }    /**     * @inheritDoc     *     * Overridden to keep track of whether the selected tab is also pressed.     */    @Override    protected MouseListener createMouseListener() {        final MouseListener delegate = super.createMouseListener();        final MouseMotionListener delegate2 = (MouseMotionListener)delegate;        return new MouseListener() {            public void mouseClicked(MouseEvent e) { delegate.mouseClicked(e); }            public void mouseEntered(MouseEvent e) { delegate.mouseEntered(e); }            public void mouseExited(MouseEvent e) { delegate.mouseExited(e); }            public void mousePressed(MouseEvent e) {                if (!tabPane.isEnabled()) {                    return;                }                int tabIndex = tabForCoordinate(tabPane, e.getX(), e.getY());                if (tabIndex >= 0 && tabPane.isEnabledAt(tabIndex)) {                    if (tabIndex == tabPane.getSelectedIndex()) {                        // Clicking on selected tab                        selectedTabIsPressed = true;                        //TODO need to just repaint the tab area!                        tabPane.repaint();                    }                }

⌨️ 快捷键说明

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