Class FlatTitlePane

  • All Implemented Interfaces:
    java.awt.image.ImageObserver, java.awt.MenuContainer, java.io.Serializable

    public class FlatTitlePane
    extends javax.swing.JComponent
    Provides the Flat LaF title bar.
    See Also:
    Serialized Form
    • Constructor Summary

      Constructors 
      Constructor Description
      FlatTitlePane​(javax.swing.JRootPane rootPane)  
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      protected void activeChanged​(boolean active)  
      void addNotify()  
      protected void addSubComponents()  
      private java.awt.Rectangle boundsInWindow​(javax.swing.JComponent c)  
      private boolean captionHitTest​(java.awt.Point pt)
      Returns whether there is a component at the given location, that processes mouse events.
      protected void close()
      Closes the window.
      protected javax.swing.JButton createButton​(java.lang.String iconKey, java.lang.String accessibleName, java.awt.event.ActionListener action)  
      protected void createButtons()  
      protected FlatTitlePane.Handler createHandler()  
      protected FlatTitlePane.FlatTitlePaneBorder createTitlePaneBorder()  
      private void debugPaintComponentWithMouseListener​(java.awt.Graphics g, java.awt.Color color, java.awt.Component c, int x, int y)  
      private void debugPaintRect​(java.awt.Graphics g, java.awt.Color color, java.awt.Rectangle r)  
      protected java.awt.Component findHorizontalGlue​(javax.swing.JMenuBar menuBar)  
      protected void frameStateChanged()  
      protected java.awt.Rectangle getMenuBarBounds()  
      protected java.lang.String getWindowTitle()  
      protected boolean hasNativeCustomDecoration()
      Returns whether windows uses native window border and has custom decorations enabled.
      protected boolean hasVisibleEmbeddedMenuBar​(javax.swing.JMenuBar menuBar)
      Returns whether this title pane currently has a visible and embedded menubar.
      protected void iconify()
      Iconifies the window.
      protected void installWindowListeners()  
      protected boolean isFullWindowContent()  
      private boolean isMaximizedBoundsFixed()
      Frame.setMaximizedBounds() behaves different on some Java versions after issues https://bugs.openjdk.java.net/browse/JDK-8231564 and https://bugs.openjdk.java.net/browse/JDK-8176359 (see also https://bugs.java.com/bugdatabase/view_bug.do?bug_id=8176359) were fixed in Java 15 and backported to 11.0.8 and 13.0.4.
      protected boolean isMenuBarEmbedded()
      Returns whether the menubar should be embedded into the title pane.
      private boolean isTitleBarCaptionAt​(java.awt.Component c, int x, int y)  
      protected boolean isWindowMaximized()  
      (package private) boolean isWindowTopBorderNeeded()  
      protected void maximize()
      Maximizes the window.
      private void maximizeOrRestore()  
      protected void menuBarChanged()  
      (package private) void menuBarInvalidate()  
      protected void menuBarLayouted()  
      void paint​(java.awt.Graphics g)  
      protected void paintComponent​(java.awt.Graphics g)  
      void removeNotify()  
      protected void restore()
      Restores the window size.
      protected void titleBarColorsChanged()  
      protected void uninstallWindowListeners()  
      (package private) void updateFullWindowContentButtonsBoundsProperty()  
      protected void updateIcon()  
      protected void updateMaximizedBounds()  
      protected void updateNativeTitleBarHeightAndHitTestSpots()  
      protected void updateNativeTitleBarHeightAndHitTestSpotsLater()  
      protected void updateVisibility()  
      • Methods inherited from class javax.swing.JComponent

        addAncestorListener, addVetoableChangeListener, computeVisibleRect, contains, createToolTip, disable, enable, firePropertyChange, firePropertyChange, firePropertyChange, fireVetoableChange, getActionForKeyStroke, getActionMap, getAlignmentX, getAlignmentY, getAncestorListeners, getAutoscrolls, getBaseline, getBaselineResizeBehavior, getBorder, getBounds, getClientProperty, getComponentGraphics, getComponentPopupMenu, getConditionForKeyStroke, getDebugGraphicsOptions, getDefaultLocale, getFontMetrics, getGraphics, getHeight, getInheritsPopupMenu, getInputMap, getInputMap, getInputVerifier, getInsets, getInsets, getListeners, getLocation, getMaximumSize, getMinimumSize, getNextFocusableComponent, getPopupLocation, getPreferredSize, getRegisteredKeyStrokes, getRootPane, getSize, getToolTipLocation, getToolTipText, getToolTipText, getTopLevelAncestor, getTransferHandler, getUI, getUIClassID, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, hide, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isOptimizedDrawingEnabled, isPaintingForPrint, isPaintingOrigin, isPaintingTile, isRequestFocusEnabled, isValidateRoot, paintBorder, paintChildren, paintImmediately, paintImmediately, paramString, print, printAll, printBorder, printChildren, printComponent, processComponentKeyEvent, processKeyBinding, processKeyEvent, processMouseEvent, processMouseMotionEvent, putClientProperty, registerKeyboardAction, registerKeyboardAction, removeAncestorListener, removeVetoableChangeListener, repaint, repaint, requestDefaultFocus, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resetKeyboardActions, reshape, revalidate, scrollRectToVisible, setActionMap, setAlignmentX, setAlignmentY, setAutoscrolls, setBackground, setBorder, setComponentPopupMenu, setDebugGraphicsOptions, setDefaultLocale, setDoubleBuffered, setEnabled, setFocusTraversalKeys, setFont, setForeground, setInheritsPopupMenu, setInputMap, setInputVerifier, setMaximumSize, setMinimumSize, setNextFocusableComponent, setOpaque, setPreferredSize, setRequestFocusEnabled, setToolTipText, setTransferHandler, setUI, setVerifyInputWhenFocusTarget, setVisible, unregisterKeyboardAction, update, updateUI
      • Methods inherited from class java.awt.Container

        add, add, add, add, add, addContainerListener, addImpl, addPropertyChangeListener, addPropertyChangeListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalKeys, getFocusTraversalPolicy, getLayout, getMousePosition, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, printComponents, processContainerEvent, processEvent, remove, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusCycleRoot, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setLayout, transferFocusDownCycle, validate, validateTree
      • Methods inherited from class java.awt.Component

        action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, createImage, createImage, createVolatileImage, createVolatileImage, disableEvents, dispatchEvent, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getAccessibleContext, getBackground, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusCycleRootAncestor, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getForeground, getGraphicsConfiguration, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputContext, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocale, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getToolkit, getTreeLock, gotFocus, handleEvent, hasFocus, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isPreferredSizeSet, isShowing, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, postEvent, prepareImage, prepareImage, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, requestFocus, requestFocus, requestFocusInWindow, resize, resize, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setFocusable, setFocusTraversalKeysEnabled, setIgnoreRepaint, setLocale, setLocation, setLocation, setMixingCutoutShape, setName, setSize, setSize, show, show, size, toString, transferFocus, transferFocusBackward, transferFocusUpCycle
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    • Field Detail

      • KEY_DEBUG_SHOW_RECTANGLES

        static final java.lang.String KEY_DEBUG_SHOW_RECTANGLES
        See Also:
        Constant Field Values
      • isWindows_10

        private static final boolean isWindows_10
      • titleFont

        protected final java.awt.Font titleFont
        Since:
        2.5
      • activeBackground

        protected final java.awt.Color activeBackground
      • inactiveBackground

        protected final java.awt.Color inactiveBackground
      • activeForeground

        protected final java.awt.Color activeForeground
      • inactiveForeground

        protected final java.awt.Color inactiveForeground
      • embeddedForeground

        protected final java.awt.Color embeddedForeground
      • borderColor

        protected final java.awt.Color borderColor
      • showIcon

        protected final boolean showIcon
        Since:
        2
      • showIconInDialogs

        protected final boolean showIconInDialogs
        Since:
        2.5
      • noIconLeftGap

        protected final int noIconLeftGap
        Since:
        2
      • iconSize

        protected final java.awt.Dimension iconSize
      • titleMinimumWidth

        protected final int titleMinimumWidth
        Since:
        2.4
      • buttonMinimumWidth

        protected final int buttonMinimumWidth
        Since:
        2.4
      • buttonMaximizedHeight

        protected final int buttonMaximizedHeight
      • centerTitle

        protected final boolean centerTitle
      • centerTitleIfMenuBarEmbedded

        protected final boolean centerTitleIfMenuBarEmbedded
      • showIconBesideTitle

        protected final boolean showIconBesideTitle
        Since:
        2.4
      • menuBarTitleGap

        protected final int menuBarTitleGap
      • menuBarTitleMinimumGap

        protected final int menuBarTitleMinimumGap
        Since:
        2.4
      • rootPane

        protected final javax.swing.JRootPane rootPane
      • windowStyle

        protected final java.lang.String windowStyle
      • leftPanel

        protected javax.swing.JPanel leftPanel
      • iconLabel

        protected javax.swing.JLabel iconLabel
      • menuBarPlaceholder

        protected javax.swing.JComponent menuBarPlaceholder
      • titleLabel

        protected javax.swing.JLabel titleLabel
      • buttonPanel

        protected javax.swing.JPanel buttonPanel
      • iconifyButton

        protected javax.swing.JButton iconifyButton
      • maximizeButton

        protected javax.swing.JButton maximizeButton
      • restoreButton

        protected javax.swing.JButton restoreButton
      • closeButton

        protected javax.swing.JButton closeButton
      • window

        protected java.awt.Window window
      • mouseLayer

        final javax.swing.JPanel mouseLayer
        This panel handles mouse events if FlatLaf window decorations are used without native window border. E.g. on Linux.

        This panel usually has same bounds as the title pane, except if fullWindowContent mode is enabled.

        This panel is not a child of the title pane. Instead it is added by FlatRootPaneUI to the layered pane at a layer under the title pane and under the frame content. The separation is necessary for fullWindowContent mode, where the title pane is layered over the frame content (for title pane buttons), but the mousePanel needs to be layered under the frame content so that components on content pane can receive mouse events when located in title area.

      • windowTopBorderLayer

        final javax.swing.JPanel windowTopBorderLayer
        This panel paint a border at the top of the window in fullWindowContent mode, if FlatLaf window decorations are enabled. Only used on Windows 10.

        This panel is not a child of the title pane. Instead it is added by FlatRootPaneUI to the layered pane at a layer over all other layers.

      • laterCounter

        private int laterCounter
      • lastCaptionHitTestX

        private int lastCaptionHitTestX
      • lastCaptionHitTestY

        private int lastCaptionHitTestY
      • lastCaptionHitTestTime

        private long lastCaptionHitTestTime
      • lastCaptionHitTestResult

        private boolean lastCaptionHitTestResult
      • debugTitleBarHeight

        private int debugTitleBarHeight
      • debugAppIconBounds

        private java.awt.Rectangle debugAppIconBounds
      • debugMinimizeButtonBounds

        private java.awt.Rectangle debugMinimizeButtonBounds
      • debugMaximizeButtonBounds

        private java.awt.Rectangle debugMaximizeButtonBounds
      • debugCloseButtonBounds

        private java.awt.Rectangle debugCloseButtonBounds
    • Constructor Detail

      • FlatTitlePane

        public FlatTitlePane​(javax.swing.JRootPane rootPane)
    • Method Detail

      • addSubComponents

        protected void addSubComponents()
      • createButtons

        protected void createButtons()
      • createButton

        protected javax.swing.JButton createButton​(java.lang.String iconKey,
                                                   java.lang.String accessibleName,
                                                   java.awt.event.ActionListener action)
      • activeChanged

        protected void activeChanged​(boolean active)
      • frameStateChanged

        protected void frameStateChanged()
      • updateVisibility

        protected void updateVisibility()
        Since:
        3
      • updateIcon

        protected void updateIcon()
      • updateFullWindowContentButtonsBoundsProperty

        void updateFullWindowContentButtonsBoundsProperty()
      • addNotify

        public void addNotify()
        Overrides:
        addNotify in class javax.swing.JComponent
      • removeNotify

        public void removeNotify()
        Overrides:
        removeNotify in class javax.swing.JComponent
      • getWindowTitle

        protected java.lang.String getWindowTitle()
      • installWindowListeners

        protected void installWindowListeners()
      • uninstallWindowListeners

        protected void uninstallWindowListeners()
      • isFullWindowContent

        protected boolean isFullWindowContent()
        Since:
        3.4
      • hasVisibleEmbeddedMenuBar

        protected boolean hasVisibleEmbeddedMenuBar​(javax.swing.JMenuBar menuBar)
        Returns whether this title pane currently has a visible and embedded menubar.
      • isMenuBarEmbedded

        protected boolean isMenuBarEmbedded()
        Returns whether the menubar should be embedded into the title pane.
      • getMenuBarBounds

        protected java.awt.Rectangle getMenuBarBounds()
      • findHorizontalGlue

        protected java.awt.Component findHorizontalGlue​(javax.swing.JMenuBar menuBar)
      • titleBarColorsChanged

        protected void titleBarColorsChanged()
      • menuBarChanged

        protected void menuBarChanged()
      • menuBarLayouted

        protected void menuBarLayouted()
      • menuBarInvalidate

        void menuBarInvalidate()
      • paint

        public void paint​(java.awt.Graphics g)
        Overrides:
        paint in class javax.swing.JComponent
      • debugPaintComponentWithMouseListener

        private void debugPaintComponentWithMouseListener​(java.awt.Graphics g,
                                                          java.awt.Color color,
                                                          java.awt.Component c,
                                                          int x,
                                                          int y)
      • debugPaintRect

        private void debugPaintRect​(java.awt.Graphics g,
                                    java.awt.Color color,
                                    java.awt.Rectangle r)
      • paintComponent

        protected void paintComponent​(java.awt.Graphics g)
        Overrides:
        paintComponent in class javax.swing.JComponent
      • iconify

        protected void iconify()
        Iconifies the window.
      • isWindowMaximized

        protected boolean isWindowMaximized()
        Since:
        2.4
      • maximize

        protected void maximize()
        Maximizes the window.
      • updateMaximizedBounds

        protected void updateMaximizedBounds()
      • isMaximizedBoundsFixed

        private boolean isMaximizedBoundsFixed()
        Frame.setMaximizedBounds() behaves different on some Java versions after issues https://bugs.openjdk.java.net/browse/JDK-8231564 and https://bugs.openjdk.java.net/browse/JDK-8176359 (see also https://bugs.java.com/bugdatabase/view_bug.do?bug_id=8176359) were fixed in Java 15 and backported to 11.0.8 and 13.0.4.
      • restore

        protected void restore()
        Restores the window size.
      • maximizeOrRestore

        private void maximizeOrRestore()
      • close

        protected void close()
        Closes the window.
      • hasNativeCustomDecoration

        protected boolean hasNativeCustomDecoration()
        Returns whether windows uses native window border and has custom decorations enabled.
      • isWindowTopBorderNeeded

        boolean isWindowTopBorderNeeded()
      • updateNativeTitleBarHeightAndHitTestSpotsLater

        protected void updateNativeTitleBarHeightAndHitTestSpotsLater()
      • updateNativeTitleBarHeightAndHitTestSpots

        protected void updateNativeTitleBarHeightAndHitTestSpots()
      • boundsInWindow

        private java.awt.Rectangle boundsInWindow​(javax.swing.JComponent c)
      • captionHitTest

        private boolean captionHitTest​(java.awt.Point pt)
        Returns whether there is a component at the given location, that processes mouse events. E.g. buttons, menus, etc.

        Note:

        • This method is invoked often when mouse is moved over title bar and should therefore return quickly.
        • This method is invoked on 'AWT-Windows' thread (not 'AWT-EventQueue' thread) while processing Windows messages.
      • isTitleBarCaptionAt

        private boolean isTitleBarCaptionAt​(java.awt.Component c,
                                            int x,
                                            int y)