mirror of
https://github.com/JFormDesigner/FlatLaf.git
synced 2026-02-12 15:07:11 -06:00
Window decorations: make embedded menu bar make smaller if horizontal space is rare to avoid that embedded menu bar overlaps buttons
This commit is contained in:
@@ -123,6 +123,14 @@ public class FlatMenuUI
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Dimension getMinimumSize( JComponent c ) {
|
||||||
|
// avoid that top-level menus (in menu bar) are made smaller if horizontal space is rare
|
||||||
|
// same code is in BasicMenuUI since Java 10
|
||||||
|
// see https://bugs.openjdk.java.net/browse/JDK-8178430
|
||||||
|
return ((JMenu)menuItem).isTopLevelMenu() ? c.getPreferredSize() : null;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Dimension getPreferredMenuItemSize( JComponent c, Icon checkIcon, Icon arrowIcon, int defaultTextIconGap ) {
|
protected Dimension getPreferredMenuItemSize( JComponent c, Icon checkIcon, Icon arrowIcon, int defaultTextIconGap ) {
|
||||||
return renderer.getPreferredMenuItemSize();
|
return renderer.getPreferredMenuItemSize();
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ package com.formdev.flatlaf.ui;
|
|||||||
import java.awt.BorderLayout;
|
import java.awt.BorderLayout;
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import java.awt.Component;
|
import java.awt.Component;
|
||||||
|
import java.awt.Container;
|
||||||
import java.awt.Dialog;
|
import java.awt.Dialog;
|
||||||
import java.awt.Dimension;
|
import java.awt.Dimension;
|
||||||
import java.awt.EventQueue;
|
import java.awt.EventQueue;
|
||||||
@@ -165,7 +166,25 @@ public class FlatTitlePane
|
|||||||
|
|
||||||
createButtons();
|
createButtons();
|
||||||
|
|
||||||
setLayout( new BorderLayout() );
|
setLayout( new BorderLayout() {
|
||||||
|
@Override
|
||||||
|
public void layoutContainer( Container target ) {
|
||||||
|
super.layoutContainer( target );
|
||||||
|
|
||||||
|
// make left panel (with embedded menu bar) smaller if horizontal space is rare
|
||||||
|
// to avoid that embedded menu bar overlaps button bar
|
||||||
|
Insets insets = target.getInsets();
|
||||||
|
int width = target.getWidth() - insets.left - insets.right;
|
||||||
|
if( leftPanel.getWidth() + buttonPanel.getWidth() > width ) {
|
||||||
|
int oldWidth = leftPanel.getWidth();
|
||||||
|
int newWidth = Math.max( width - buttonPanel.getWidth(), 0 );
|
||||||
|
leftPanel.setSize( newWidth, leftPanel.getHeight() );
|
||||||
|
if( !getComponentOrientation().isLeftToRight() )
|
||||||
|
leftPanel.setLocation( leftPanel.getX() + (oldWidth - newWidth), leftPanel.getY() );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} );
|
||||||
|
|
||||||
add( leftPanel, BorderLayout.LINE_START );
|
add( leftPanel, BorderLayout.LINE_START );
|
||||||
add( titleLabel, BorderLayout.CENTER );
|
add( titleLabel, BorderLayout.CENTER );
|
||||||
add( buttonPanel, BorderLayout.LINE_END );
|
add( buttonPanel, BorderLayout.LINE_END );
|
||||||
|
|||||||
@@ -62,6 +62,7 @@ public class FlatTestFrame
|
|||||||
private FlatInspector inspector;
|
private FlatInspector inspector;
|
||||||
|
|
||||||
public boolean useApplyComponentOrientation;
|
public boolean useApplyComponentOrientation;
|
||||||
|
public boolean applyComponentOrientationToFrame;
|
||||||
|
|
||||||
public static FlatTestFrame create( String[] args, String title ) {
|
public static FlatTestFrame create( String[] args, String title ) {
|
||||||
DemoPrefs.init( PREFS_ROOT_PATH );
|
DemoPrefs.init( PREFS_ROOT_PATH );
|
||||||
@@ -439,7 +440,9 @@ public class FlatTestFrame
|
|||||||
? ComponentOrientation.RIGHT_TO_LEFT
|
? ComponentOrientation.RIGHT_TO_LEFT
|
||||||
: ComponentOrientation.LEFT_TO_RIGHT;
|
: ComponentOrientation.LEFT_TO_RIGHT;
|
||||||
|
|
||||||
if( useApplyComponentOrientation )
|
if( applyComponentOrientationToFrame )
|
||||||
|
applyComponentOrientation( orientation );
|
||||||
|
else if( useApplyComponentOrientation )
|
||||||
content.applyComponentOrientation( orientation );
|
content.applyComponentOrientation( orientation );
|
||||||
else {
|
else {
|
||||||
updateComponentsRecur( content, (c, type) -> {
|
updateComponentsRecur( content, (c, type) -> {
|
||||||
|
|||||||
@@ -40,6 +40,7 @@ public class FlatWindowDecorationsTest
|
|||||||
JDialog.setDefaultLookAndFeelDecorated( true );
|
JDialog.setDefaultLookAndFeelDecorated( true );
|
||||||
|
|
||||||
FlatTestFrame frame = FlatTestFrame.create( args, "FlatWindowDecorationsTest" );
|
FlatTestFrame frame = FlatTestFrame.create( args, "FlatWindowDecorationsTest" );
|
||||||
|
frame.applyComponentOrientationToFrame = true;
|
||||||
|
|
||||||
// WARNING: Do not this in real-world programs.
|
// WARNING: Do not this in real-world programs.
|
||||||
// frame.setUndecorated( true );
|
// frame.setUndecorated( true );
|
||||||
|
|||||||
Reference in New Issue
Block a user