mirror of
https://github.com/JFormDesigner/FlatLaf.git
synced 2025-12-06 14:00:55 +03:00
HTML: Fixed font sizes for HTML tags <h1>...<h6>, <code>, <kbd>, <big>, <small> and <samp> in HTML text for components Button, CheckBox, RadioButton, MenuItem (and subclasses), JideLabel, JideButton, JXBusyLabel and JXHyperlink. Also fixed for Label and ToolTip if using Java 11+.
This commit is contained in:
@@ -14,6 +14,10 @@ FlatLaf Change Log
|
||||
- FlatLaf window decorations: Window top border on Windows 10 in "full window
|
||||
content" mode was not fully repainted when activating or deactivating window.
|
||||
(issue #809)
|
||||
- HTML: Fixed font sizes for HTML tags `<h1>`...`<h6>`, `<code>`, `<kbd>`,
|
||||
`<big>`, `<small>` and `<samp>` in HTML text for components Button, CheckBox,
|
||||
RadioButton, MenuItem (and subclasses), JideLabel, JideButton, JXBusyLabel and
|
||||
JXHyperlink. Also fixed for Label and ToolTip if using Java 11+.
|
||||
|
||||
#### Incompatibilities
|
||||
|
||||
|
||||
@@ -300,6 +300,10 @@ public class FlatButtonUI
|
||||
|
||||
protected void propertyChange( AbstractButton b, PropertyChangeEvent e ) {
|
||||
switch( e.getPropertyName() ) {
|
||||
case BasicHTML.propertyKey:
|
||||
FlatHTML.updateRendererCSSFontBaseSize( b );
|
||||
break;
|
||||
|
||||
case SQUARE_SIZE:
|
||||
case MINIMUM_WIDTH:
|
||||
case MINIMUM_HEIGHT:
|
||||
|
||||
@@ -23,6 +23,7 @@ import java.lang.invoke.MethodHandles;
|
||||
import java.util.Map;
|
||||
import javax.swing.Icon;
|
||||
import javax.swing.JComponent;
|
||||
import javax.swing.JMenuItem;
|
||||
import javax.swing.LookAndFeel;
|
||||
import javax.swing.plaf.ComponentUI;
|
||||
import javax.swing.plaf.basic.BasicCheckBoxMenuItemUI;
|
||||
@@ -102,13 +103,23 @@ public class FlatCheckBoxMenuItemUI
|
||||
oldStyleValues = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void installComponents( JMenuItem menuItem ) {
|
||||
super.installComponents( menuItem );
|
||||
|
||||
// update HTML renderer if necessary
|
||||
FlatHTML.updateRendererCSSFontBaseSize( menuItem );
|
||||
}
|
||||
|
||||
protected FlatMenuItemRenderer createRenderer() {
|
||||
return new FlatMenuItemRenderer( menuItem, checkIcon, arrowIcon, acceleratorFont, acceleratorDelimiter );
|
||||
}
|
||||
|
||||
@Override
|
||||
protected PropertyChangeListener createPropertyChangeListener( JComponent c ) {
|
||||
return FlatStylingSupport.createPropertyChangeListener( c, this::installStyle, super.createPropertyChangeListener( c ) );
|
||||
return FlatHTML.createPropertyChangeListener(
|
||||
FlatStylingSupport.createPropertyChangeListener( c, this::installStyle,
|
||||
super.createPropertyChangeListener( c ) ) );
|
||||
}
|
||||
|
||||
/** @since 2 */
|
||||
|
||||
133
flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatHTML.java
Normal file
133
flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatHTML.java
Normal file
@@ -0,0 +1,133 @@
|
||||
/*
|
||||
* Copyright 2024 FormDev Software GmbH
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.formdev.flatlaf.ui;
|
||||
|
||||
import java.beans.PropertyChangeEvent;
|
||||
import java.beans.PropertyChangeListener;
|
||||
import javax.swing.JComponent;
|
||||
import javax.swing.plaf.basic.BasicHTML;
|
||||
import javax.swing.text.Document;
|
||||
import javax.swing.text.LabelView;
|
||||
import javax.swing.text.View;
|
||||
import javax.swing.text.html.HTMLDocument;
|
||||
import javax.swing.text.html.StyleSheet;
|
||||
|
||||
/**
|
||||
* @author Karl Tauber
|
||||
* @since 3.5
|
||||
*/
|
||||
public class FlatHTML
|
||||
{
|
||||
private FlatHTML() {}
|
||||
|
||||
/**
|
||||
* Adds CSS rule BASE_SIZE to the style sheet of the HTML view,
|
||||
* which re-calculates font sizes based on current component font size.
|
||||
* This is necessary for "absolute-size" keywords (e.g. "x-large")
|
||||
* for "font-size" attributes in default style sheet (see javax/swing/text/html/default.css).
|
||||
* See also <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/font-size?retiredLocale=de#values">CSS font-size</a>.
|
||||
* <p>
|
||||
* This method should be invoked after {@link BasicHTML#updateRenderer(JComponent, String)}.
|
||||
*/
|
||||
public static void updateRendererCSSFontBaseSize( JComponent c ) {
|
||||
View view = (View) c.getClientProperty( BasicHTML.propertyKey );
|
||||
if( view == null )
|
||||
return;
|
||||
|
||||
// dumpViews( view, 0 );
|
||||
|
||||
Document doc = view.getDocument();
|
||||
if( !(doc instanceof HTMLDocument) )
|
||||
return;
|
||||
|
||||
// add BASE_SIZE rule if necessary
|
||||
// - if point size at index 7 is not 36, then probably HTML text contains BASE_SIZE rule
|
||||
// - if point size at index 4 is equal to given font size, then it is not necessary to add BASE_SIZE rule
|
||||
StyleSheet styleSheet = ((HTMLDocument)doc).getStyleSheet();
|
||||
int fontBaseSize = c.getFont().getSize();
|
||||
if( styleSheet.getPointSize( 7 ) != 36f ||
|
||||
styleSheet.getPointSize( 4 ) == fontBaseSize )
|
||||
return;
|
||||
|
||||
// BASE_SIZE rule is parsed in javax.swing.text.html.StyleSheet.addRule()
|
||||
styleSheet.addRule( "BASE_SIZE " + fontBaseSize );
|
||||
clearViewCaches( view );
|
||||
|
||||
// dumpViews( view, 0 );
|
||||
}
|
||||
|
||||
/**
|
||||
* Clears cached values in view so that CSS changes take effect.
|
||||
*/
|
||||
private static void clearViewCaches( View view ) {
|
||||
if( view instanceof LabelView )
|
||||
((LabelView)view).changedUpdate( null, null, null );
|
||||
|
||||
int viewCount = view.getViewCount();
|
||||
for( int i = 0; i < viewCount; i++ )
|
||||
clearViewCaches( view.getView( i ) );
|
||||
}
|
||||
|
||||
public static PropertyChangeListener createPropertyChangeListener( PropertyChangeListener superListener ) {
|
||||
return e -> {
|
||||
if( superListener != null )
|
||||
superListener.propertyChange( e );
|
||||
propertyChange( e );
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Invokes {@link #updateRendererCSSFontBaseSize(JComponent)}
|
||||
* for {@link BasicHTML#propertyKey} property change events,
|
||||
* which are fired when {@link BasicHTML#updateRenderer(JComponent, String)}
|
||||
* updates the HTML view.
|
||||
*/
|
||||
public static void propertyChange( PropertyChangeEvent e ) {
|
||||
if( BasicHTML.propertyKey.equals( e.getPropertyName() ) )
|
||||
FlatHTML.updateRendererCSSFontBaseSize( (JComponent) e.getSource() );
|
||||
}
|
||||
|
||||
/*debug
|
||||
public static void dumpView( JComponent c ) {
|
||||
View view = (View) c.getClientProperty( BasicHTML.propertyKey );
|
||||
if( view != null )
|
||||
dumpViews( view, 0 );
|
||||
}
|
||||
|
||||
public static void dumpViews( View view, int indent ) {
|
||||
for( int i = 0; i < indent; i++ )
|
||||
System.out.print( " " );
|
||||
System.out.print( view.getClass().isAnonymousClass() ? view.getClass().getName() : view.getClass().getSimpleName() );
|
||||
if( view instanceof LabelView ) {
|
||||
LabelView lview = ((LabelView)view);
|
||||
Font font = lview.getFont();
|
||||
Color foreground = lview.getForeground();
|
||||
System.out.printf( " %2d-%-2d %-14s %d #%06x",
|
||||
lview.getStartOffset(), lview.getEndOffset() - 1,
|
||||
font.getName(), font.getSize(),
|
||||
foreground.getRGB() & 0xffffff );
|
||||
}
|
||||
System.out.println();
|
||||
|
||||
int viewCount = view.getViewCount();
|
||||
for( int i = 0; i < viewCount; i++ ) {
|
||||
View child = view.getView( i );
|
||||
dumpViews( child, indent + 1 );
|
||||
}
|
||||
}
|
||||
debug*/
|
||||
}
|
||||
@@ -22,11 +22,7 @@ import java.awt.Graphics;
|
||||
import java.awt.Graphics2D;
|
||||
import java.awt.Rectangle;
|
||||
import java.beans.PropertyChangeEvent;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashSet;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import javax.swing.Icon;
|
||||
import javax.swing.JComponent;
|
||||
import javax.swing.JLabel;
|
||||
@@ -113,16 +109,13 @@ public class FlatLabelUI
|
||||
super.installComponents( c );
|
||||
|
||||
// update HTML renderer if necessary
|
||||
updateHTMLRenderer( c, c.getText(), false );
|
||||
FlatHTML.updateRendererCSSFontBaseSize( c );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void propertyChange( PropertyChangeEvent e ) {
|
||||
String name = e.getPropertyName();
|
||||
if( name == "text" || name == "font" || name == "foreground" ) {
|
||||
JLabel label = (JLabel) e.getSource();
|
||||
updateHTMLRenderer( label, label.getText(), true );
|
||||
} else if( name.equals( FlatClientProperties.STYLE ) || name.equals( FlatClientProperties.STYLE_CLASS ) ) {
|
||||
if( name.equals( FlatClientProperties.STYLE ) || name.equals( FlatClientProperties.STYLE_CLASS ) ) {
|
||||
JLabel label = (JLabel) e.getSource();
|
||||
if( shared && FlatStylingSupport.hasStyleProperty( label ) ) {
|
||||
// unshare component UI if necessary
|
||||
@@ -132,8 +125,10 @@ public class FlatLabelUI
|
||||
installStyle( label );
|
||||
label.revalidate();
|
||||
label.repaint();
|
||||
} else
|
||||
super.propertyChange( e );
|
||||
}
|
||||
|
||||
super.propertyChange( e );
|
||||
FlatHTML.propertyChange( e );
|
||||
}
|
||||
|
||||
/** @since 2 */
|
||||
@@ -168,85 +163,6 @@ public class FlatLabelUI
|
||||
return FlatStylingSupport.getAnnotatedStyleableValue( this, key );
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks whether text contains HTML tags that use "absolute-size" keywords
|
||||
* (e.g. "x-large") for font-size in default style sheet
|
||||
* (see javax/swing/text/html/default.css).
|
||||
* If yes, adds a special CSS rule (BASE_SIZE) to the HTML text, which
|
||||
* re-calculates font sizes based on current component font size.
|
||||
*/
|
||||
static void updateHTMLRenderer( JComponent c, String text, boolean always ) {
|
||||
if( BasicHTML.isHTMLString( text ) &&
|
||||
c.getClientProperty( "html.disable" ) != Boolean.TRUE &&
|
||||
needsFontBaseSize( text ) )
|
||||
{
|
||||
// BASE_SIZE rule is parsed in javax.swing.text.html.StyleSheet.addRule()
|
||||
String style = "<style>BASE_SIZE " + c.getFont().getSize() + "</style>";
|
||||
|
||||
String lowerText = text.toLowerCase( Locale.ENGLISH );
|
||||
int headIndex;
|
||||
int styleIndex;
|
||||
|
||||
int insertIndex;
|
||||
if( (headIndex = lowerText.indexOf( "<head>" )) >= 0 ) {
|
||||
// there is a <head> tag --> insert after <head> tag
|
||||
insertIndex = headIndex + "<head>".length();
|
||||
} else if( (styleIndex = lowerText.indexOf( "<style>" )) >= 0 ) {
|
||||
// there is a <style> tag --> insert before <style> tag
|
||||
insertIndex = styleIndex;
|
||||
} else {
|
||||
// no <head> or <style> tag --> insert <head> tag after <html> tag
|
||||
style = "<head>" + style + "</head>";
|
||||
insertIndex = "<html>".length();
|
||||
}
|
||||
|
||||
text = text.substring( 0, insertIndex )
|
||||
+ style
|
||||
+ text.substring( insertIndex );
|
||||
} else if( !always )
|
||||
return; // not necessary to invoke BasicHTML.updateRenderer()
|
||||
|
||||
BasicHTML.updateRenderer( c, text );
|
||||
}
|
||||
|
||||
private static Set<String> tagsUseFontSizeSet;
|
||||
|
||||
private static boolean needsFontBaseSize( String text ) {
|
||||
if( tagsUseFontSizeSet == null ) {
|
||||
// tags that use font-size in javax/swing/text/html/default.css
|
||||
tagsUseFontSizeSet = new HashSet<>( Arrays.asList(
|
||||
"h1", "h2", "h3", "h4", "h5", "h6", "code", "kbd", "big", "small", "samp" ) );
|
||||
}
|
||||
|
||||
// search for tags in HTML text
|
||||
int textLength = text.length();
|
||||
for( int i = 6; i < textLength - 1; i++ ) {
|
||||
if( text.charAt( i ) == '<' ) {
|
||||
switch( text.charAt( i + 1 ) ) {
|
||||
// first letters of tags in tagsUseFontSizeSet
|
||||
case 'b': case 'B':
|
||||
case 'c': case 'C':
|
||||
case 'h': case 'H':
|
||||
case 'k': case 'K':
|
||||
case 's': case 'S':
|
||||
int tagBegin = i + 1;
|
||||
for( i += 2; i < textLength; i++ ) {
|
||||
if( !Character.isLetterOrDigit( text.charAt( i ) ) ) {
|
||||
String tag = text.substring( tagBegin, i ).toLowerCase( Locale.ENGLISH );
|
||||
if( tagsUseFontSizeSet.contains( tag ) )
|
||||
return true;
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update( Graphics g, JComponent c ) {
|
||||
FlatPanelUI.fillRoundedBackground( g, c, arc );
|
||||
|
||||
@@ -103,13 +103,23 @@ public class FlatMenuItemUI
|
||||
oldStyleValues = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void installComponents( JMenuItem menuItem ) {
|
||||
super.installComponents( menuItem );
|
||||
|
||||
// update HTML renderer if necessary
|
||||
FlatHTML.updateRendererCSSFontBaseSize( menuItem );
|
||||
}
|
||||
|
||||
protected FlatMenuItemRenderer createRenderer() {
|
||||
return new FlatMenuItemRenderer( menuItem, checkIcon, arrowIcon, acceleratorFont, acceleratorDelimiter );
|
||||
}
|
||||
|
||||
@Override
|
||||
protected PropertyChangeListener createPropertyChangeListener( JComponent c ) {
|
||||
return FlatStylingSupport.createPropertyChangeListener( c, this::installStyle, super.createPropertyChangeListener( c ) );
|
||||
return FlatHTML.createPropertyChangeListener(
|
||||
FlatStylingSupport.createPropertyChangeListener( c, this::installStyle,
|
||||
super.createPropertyChangeListener( c ) ) );
|
||||
}
|
||||
|
||||
/** @since 2 */
|
||||
|
||||
@@ -136,6 +136,14 @@ public class FlatMenuUI
|
||||
oldStyleValues = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void installComponents( JMenuItem menuItem ) {
|
||||
super.installComponents( menuItem );
|
||||
|
||||
// update HTML renderer if necessary
|
||||
FlatHTML.updateRendererCSSFontBaseSize( menuItem );
|
||||
}
|
||||
|
||||
protected FlatMenuItemRenderer createRenderer() {
|
||||
return new FlatMenuRenderer( menuItem, checkIcon, arrowIcon, acceleratorFont, acceleratorDelimiter );
|
||||
}
|
||||
@@ -167,7 +175,9 @@ public class FlatMenuUI
|
||||
|
||||
@Override
|
||||
protected PropertyChangeListener createPropertyChangeListener( JComponent c ) {
|
||||
return FlatStylingSupport.createPropertyChangeListener( c, this::installStyle, super.createPropertyChangeListener( c ) );
|
||||
return FlatHTML.createPropertyChangeListener(
|
||||
FlatStylingSupport.createPropertyChangeListener( c, this::installStyle,
|
||||
super.createPropertyChangeListener( c ) ) );
|
||||
}
|
||||
|
||||
/** @since 2 */
|
||||
|
||||
@@ -23,6 +23,7 @@ import java.lang.invoke.MethodHandles;
|
||||
import java.util.Map;
|
||||
import javax.swing.Icon;
|
||||
import javax.swing.JComponent;
|
||||
import javax.swing.JMenuItem;
|
||||
import javax.swing.LookAndFeel;
|
||||
import javax.swing.plaf.ComponentUI;
|
||||
import javax.swing.plaf.basic.BasicMenuItemUI;
|
||||
@@ -102,13 +103,23 @@ public class FlatRadioButtonMenuItemUI
|
||||
oldStyleValues = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void installComponents( JMenuItem menuItem ) {
|
||||
super.installComponents( menuItem );
|
||||
|
||||
// update HTML renderer if necessary
|
||||
FlatHTML.updateRendererCSSFontBaseSize( menuItem );
|
||||
}
|
||||
|
||||
protected FlatMenuItemRenderer createRenderer() {
|
||||
return new FlatMenuItemRenderer( menuItem, checkIcon, arrowIcon, acceleratorFont, acceleratorDelimiter );
|
||||
}
|
||||
|
||||
@Override
|
||||
protected PropertyChangeListener createPropertyChangeListener( JComponent c ) {
|
||||
return FlatStylingSupport.createPropertyChangeListener( c, this::installStyle, super.createPropertyChangeListener( c ) );
|
||||
return FlatHTML.createPropertyChangeListener(
|
||||
FlatStylingSupport.createPropertyChangeListener( c, this::installStyle,
|
||||
super.createPropertyChangeListener( c ) ) );
|
||||
}
|
||||
|
||||
/** @since 2 */
|
||||
|
||||
@@ -40,6 +40,7 @@ import javax.swing.SwingUtilities;
|
||||
import javax.swing.UIManager;
|
||||
import javax.swing.plaf.ComponentUI;
|
||||
import javax.swing.plaf.basic.BasicButtonListener;
|
||||
import javax.swing.plaf.basic.BasicHTML;
|
||||
import javax.swing.plaf.basic.BasicRadioButtonUI;
|
||||
import com.formdev.flatlaf.FlatClientProperties;
|
||||
import com.formdev.flatlaf.icons.FlatCheckBoxIcon;
|
||||
@@ -159,6 +160,10 @@ public class FlatRadioButtonUI
|
||||
/** @since 2 */
|
||||
protected void propertyChange( AbstractButton b, PropertyChangeEvent e ) {
|
||||
switch( e.getPropertyName() ) {
|
||||
case BasicHTML.propertyKey:
|
||||
FlatHTML.updateRendererCSSFontBaseSize( b );
|
||||
break;
|
||||
|
||||
case FlatClientProperties.STYLE:
|
||||
case FlatClientProperties.STYLE_CLASS:
|
||||
if( shared && FlatStylingSupport.hasStyleProperty( b ) ) {
|
||||
|
||||
@@ -61,7 +61,7 @@ public class FlatToolTipUI
|
||||
super.installUI( c );
|
||||
|
||||
// update HTML renderer if necessary
|
||||
FlatLabelUI.updateHTMLRenderer( c, ((JToolTip)c).getTipText(), false );
|
||||
FlatHTML.updateRendererCSSFontBaseSize( c );
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -81,11 +81,7 @@ public class FlatToolTipUI
|
||||
/** @since 2.0.1 */
|
||||
@Override
|
||||
public void propertyChange( PropertyChangeEvent e ) {
|
||||
String name = e.getPropertyName();
|
||||
if( name == "tiptext" || name == "font" || name == "foreground" ) {
|
||||
JToolTip toolTip = (JToolTip) e.getSource();
|
||||
FlatLabelUI.updateHTMLRenderer( toolTip, toolTip.getTipText(), false );
|
||||
}
|
||||
FlatHTML.propertyChange( e );
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -16,9 +16,14 @@
|
||||
|
||||
package com.formdev.flatlaf.jideoss.ui;
|
||||
|
||||
import java.beans.PropertyChangeEvent;
|
||||
import javax.swing.AbstractButton;
|
||||
import javax.swing.JComponent;
|
||||
import javax.swing.plaf.ComponentUI;
|
||||
import javax.swing.plaf.basic.BasicButtonListener;
|
||||
import com.formdev.flatlaf.ui.FlatHTML;
|
||||
import com.jidesoft.plaf.LookAndFeelFactory;
|
||||
import com.jidesoft.plaf.basic.BasicJideButtonListener;
|
||||
import com.jidesoft.plaf.basic.BasicJideButtonUI;
|
||||
|
||||
/**
|
||||
@@ -37,4 +42,26 @@ public class FlatJideButtonUI
|
||||
|
||||
return new FlatJideButtonUI();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected BasicButtonListener createButtonListener( AbstractButton b ) {
|
||||
return new FlatJideButtonListener( b );
|
||||
}
|
||||
|
||||
//---- class FlatJideButtonListener ---------------------------------------
|
||||
|
||||
/** @since 3.5 */
|
||||
protected class FlatJideButtonListener
|
||||
extends BasicJideButtonListener
|
||||
{
|
||||
protected FlatJideButtonListener( AbstractButton b ) {
|
||||
super( b );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void propertyChange( PropertyChangeEvent e ) {
|
||||
super.propertyChange( e );
|
||||
FlatHTML.propertyChange( e );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,11 +18,13 @@ package com.formdev.flatlaf.jideoss.ui;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.awt.Graphics;
|
||||
import java.beans.PropertyChangeEvent;
|
||||
import javax.swing.JComponent;
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.UIManager;
|
||||
import javax.swing.plaf.ComponentUI;
|
||||
import com.formdev.flatlaf.FlatLaf;
|
||||
import com.formdev.flatlaf.ui.FlatHTML;
|
||||
import com.formdev.flatlaf.ui.FlatUIUtils;
|
||||
import com.jidesoft.plaf.LookAndFeelFactory;
|
||||
import com.jidesoft.plaf.basic.BasicJideLabelUI;
|
||||
@@ -65,6 +67,20 @@ public class FlatJideLabelUI
|
||||
defaults_initialized = false;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void installComponents( JLabel c ) {
|
||||
super.installComponents( c );
|
||||
|
||||
// update HTML renderer if necessary
|
||||
FlatHTML.updateRendererCSSFontBaseSize( c );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void propertyChange( PropertyChangeEvent e ) {
|
||||
super.propertyChange( e );
|
||||
FlatHTML.propertyChange( e );
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void paintEnabledText( JLabel l, Graphics g, String s, int textX, int textY ) {
|
||||
int mnemIndex = FlatLaf.isShowMnemonics() ? l.getDisplayedMnemonicIndex() : -1;
|
||||
|
||||
@@ -18,6 +18,7 @@ package com.formdev.flatlaf.swingx.ui;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.awt.Graphics;
|
||||
import java.beans.PropertyChangeEvent;
|
||||
import javax.swing.JComponent;
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.UIManager;
|
||||
@@ -25,6 +26,7 @@ import javax.swing.plaf.ComponentUI;
|
||||
import org.jdesktop.swingx.JXBusyLabel;
|
||||
import org.jdesktop.swingx.plaf.basic.BasicBusyLabelUI;
|
||||
import com.formdev.flatlaf.FlatLaf;
|
||||
import com.formdev.flatlaf.ui.FlatHTML;
|
||||
import com.formdev.flatlaf.ui.FlatUIUtils;
|
||||
|
||||
//TODO scale busy spinner
|
||||
@@ -70,6 +72,20 @@ public class FlatBusyLabelUI
|
||||
disabledForeground = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void installComponents( JLabel c ) {
|
||||
super.installComponents( c );
|
||||
|
||||
// update HTML renderer if necessary
|
||||
FlatHTML.updateRendererCSSFontBaseSize( c );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void propertyChange( PropertyChangeEvent e ) {
|
||||
super.propertyChange( e );
|
||||
FlatHTML.propertyChange( e );
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void paintDisabledText( JLabel l, Graphics g, String s, int textX, int textY ) {
|
||||
int mnemIndex = FlatLaf.isShowMnemonics() ? l.getDisplayedMnemonicIndex() : -1;
|
||||
|
||||
@@ -21,12 +21,15 @@ import java.awt.Graphics;
|
||||
import java.awt.Graphics2D;
|
||||
import java.awt.Rectangle;
|
||||
import java.awt.geom.Rectangle2D;
|
||||
import java.beans.PropertyChangeEvent;
|
||||
import javax.swing.AbstractButton;
|
||||
import javax.swing.JComponent;
|
||||
import javax.swing.UIManager;
|
||||
import javax.swing.plaf.ComponentUI;
|
||||
import javax.swing.plaf.basic.BasicButtonListener;
|
||||
import org.jdesktop.swingx.plaf.basic.BasicHyperlinkUI;
|
||||
import com.formdev.flatlaf.ui.FlatButtonUI;
|
||||
import com.formdev.flatlaf.ui.FlatHTML;
|
||||
import com.formdev.flatlaf.ui.FlatUIUtils;
|
||||
import com.formdev.flatlaf.util.UIScale;
|
||||
|
||||
@@ -60,6 +63,11 @@ public class FlatHyperlinkUI
|
||||
disabledText = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected BasicButtonListener createButtonListener( AbstractButton b ) {
|
||||
return new FlatHyperlinkListener( b );
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void paintText( Graphics g, AbstractButton b, Rectangle textRect, String text ) {
|
||||
FlatButtonUI.paintText( g, b, textRect, text, b.isEnabled() ? b.getForeground() : disabledText );
|
||||
@@ -79,4 +87,21 @@ public class FlatHyperlinkUI
|
||||
|
||||
FlatUIUtils.resetRenderingHints( g, oldRenderingHints );
|
||||
}
|
||||
|
||||
//---- class FlatHyperlinkListener ----------------------------------------
|
||||
|
||||
/** @since 3.5 */
|
||||
protected class FlatHyperlinkListener
|
||||
extends BasicHyperlinkListener
|
||||
{
|
||||
protected FlatHyperlinkListener( AbstractButton b ) {
|
||||
super( b );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void propertyChange( PropertyChangeEvent e ) {
|
||||
super.propertyChange( e );
|
||||
FlatHTML.propertyChange( e );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,8 +18,10 @@ package com.formdev.flatlaf.testing;
|
||||
|
||||
import java.awt.*;
|
||||
import javax.swing.*;
|
||||
import javax.swing.text.JTextComponent;
|
||||
import com.formdev.flatlaf.util.StringUtils;
|
||||
import com.formdev.flatlaf.util.UIScale;
|
||||
import com.jidesoft.swing.*;
|
||||
import net.miginfocom.swing.*;
|
||||
import org.jdesktop.swingx.*;
|
||||
|
||||
@@ -53,6 +55,58 @@ public class FlatHtmlTest
|
||||
increaseFontSize();
|
||||
}
|
||||
|
||||
private void changeHtmlText() {
|
||||
changeHtmlText( this );
|
||||
}
|
||||
|
||||
private void changeHtmlText( Component c ) {
|
||||
if( c instanceof AbstractButton )
|
||||
((AbstractButton)c).setText( changeHtmlText( ((AbstractButton)c).getText() ) );
|
||||
else if( c instanceof JLabel )
|
||||
((JLabel)c).setText( changeHtmlText( ((JLabel)c).getText() ) );
|
||||
else if( c instanceof JTextComponent )
|
||||
((JTextComponent)c).setText( changeHtmlText( ((JTextComponent)c).getText() ) );
|
||||
else if( c instanceof JToolTip )
|
||||
((JToolTip)c).setTipText( changeHtmlText( ((JToolTip)c).getTipText() ) );
|
||||
else if( c instanceof JComboBox ) {
|
||||
@SuppressWarnings( "unchecked" )
|
||||
JComboBox<String> cb = (JComboBox<String>) c;
|
||||
DefaultComboBoxModel<String> model = (DefaultComboBoxModel<String>) cb.getModel();
|
||||
String text = model.getElementAt( 0 );
|
||||
String newText = changeHtmlText( text );
|
||||
if( newText != text ) {
|
||||
model.insertElementAt( newText, 1 );
|
||||
model.removeElementAt( 0 );
|
||||
}
|
||||
}
|
||||
|
||||
if( c instanceof Container ) {
|
||||
for( Component child : ((Container)c).getComponents() )
|
||||
changeHtmlText( child );
|
||||
}
|
||||
}
|
||||
|
||||
private String changeHtmlText( String text ) {
|
||||
String htmlTag = "<html>";
|
||||
if( !text.startsWith( htmlTag ) )
|
||||
return text;
|
||||
|
||||
String bodyTag = "<body>";
|
||||
int bodyIndex = text.indexOf( bodyTag );
|
||||
if( bodyIndex < 0 )
|
||||
bodyIndex = htmlTag.length();
|
||||
else
|
||||
bodyIndex += bodyTag.length();
|
||||
|
||||
int insertIndex = text.indexOf( '>', bodyIndex );
|
||||
if( insertIndex < 0 )
|
||||
insertIndex = bodyIndex;
|
||||
else
|
||||
insertIndex++;
|
||||
|
||||
return text.substring( 0, insertIndex ) + "X" + text.substring( insertIndex );
|
||||
}
|
||||
|
||||
private void initComponents() {
|
||||
// JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents
|
||||
JLabel labelLabel = new JLabel();
|
||||
@@ -88,14 +142,28 @@ public class FlatHtmlTest
|
||||
JRadioButtonMenuItem radioButtonMenuItem1 = new JRadioButtonMenuItem();
|
||||
JRadioButtonMenuItem radioButtonMenuItem2 = new JRadioButtonMenuItem();
|
||||
JLabel label14 = new JLabel();
|
||||
JLabel label15 = new JLabel();
|
||||
JLabel label16 = new JLabel();
|
||||
JToolTip toolTip3 = new JToolTip();
|
||||
JToolTip toolTip4 = new JToolTip();
|
||||
JLabel label17 = new JLabel();
|
||||
JComboBox<String> comboBox1 = new JComboBox<>();
|
||||
JComboBox<String> comboBox2 = new JComboBox<>();
|
||||
JLabel label56 = new JLabel();
|
||||
JXBusyLabel xBusyLabel1 = new JXBusyLabel();
|
||||
JXBusyLabel xBusyLabel2 = new JXBusyLabel();
|
||||
JLabel label18 = new JLabel();
|
||||
JXHyperlink xHyperlink1 = new JXHyperlink();
|
||||
JXHyperlink xHyperlink2 = new JXHyperlink();
|
||||
JLabel label33 = new JLabel();
|
||||
JideLabel jideLabel1 = new JideLabel();
|
||||
JideLabel jideLabel2 = new JideLabel();
|
||||
JLabel label16 = new JLabel();
|
||||
JideButton jideButton1 = new JideButton();
|
||||
JideButton jideButton2 = new JideButton();
|
||||
JLabel label54 = new JLabel();
|
||||
JideToggleButton jideToggleButton1 = new JideToggleButton();
|
||||
JideToggleButton jideToggleButton2 = new JideToggleButton();
|
||||
JButton changeHtmlTextButton = new JButton();
|
||||
JLabel label15 = new JLabel();
|
||||
label1 = new JLabel();
|
||||
JScrollPane scrollPane15 = new JScrollPane();
|
||||
editorPane1 = new JEditorPane();
|
||||
@@ -143,13 +211,10 @@ public class FlatHtmlTest
|
||||
JLabel label47 = new JLabel();
|
||||
JLabel label53 = new JLabel();
|
||||
JLabel label48 = new JLabel();
|
||||
JLabel label54 = new JLabel();
|
||||
JLabel label56 = new JLabel();
|
||||
JLabel label57 = new JLabel();
|
||||
|
||||
//======== this ========
|
||||
setLayout(new MigLayout(
|
||||
"ltr,insets dialog,hidemode 3",
|
||||
"flowy,ltr,insets dialog,hidemode 3",
|
||||
// columns
|
||||
"[grow,sizegroup 1,fill]" +
|
||||
"[grow,sizegroup 1,fill]" +
|
||||
@@ -196,6 +261,12 @@ public class FlatHtmlTest
|
||||
"[]" +
|
||||
"[]" +
|
||||
"[]" +
|
||||
"[]unrel" +
|
||||
"[]" +
|
||||
"[]unrel" +
|
||||
"[]" +
|
||||
"[]" +
|
||||
"[]para" +
|
||||
"[]" +
|
||||
"[]"));
|
||||
|
||||
@@ -204,7 +275,7 @@ public class FlatHtmlTest
|
||||
panel1.add(label5, "cell 0 0");
|
||||
|
||||
//---- label6 ----
|
||||
label6.setText("<html>Some <b>Bold</b> Text");
|
||||
label6.setText("<html>Some <b>Bold</b> Text <kbd>kbd</kbd>");
|
||||
panel1.add(label6, "cell 1 0");
|
||||
|
||||
//---- label7 ----
|
||||
@@ -212,11 +283,11 @@ public class FlatHtmlTest
|
||||
panel1.add(label7, "cell 2 0");
|
||||
|
||||
//---- label3 ----
|
||||
label3.setText("JButon:");
|
||||
label3.setText("JButton:");
|
||||
panel1.add(label3, "cell 0 1");
|
||||
|
||||
//---- button1 ----
|
||||
button1.setText("<html>Some <b>Bold</b> Text");
|
||||
button1.setText("<html>Some <b>Bold</b> Text <kbd>kbd</kbd>");
|
||||
panel1.add(button1, "cell 1 1");
|
||||
|
||||
//---- button2 ----
|
||||
@@ -228,7 +299,7 @@ public class FlatHtmlTest
|
||||
panel1.add(label11, "cell 0 2");
|
||||
|
||||
//---- toggleButton1 ----
|
||||
toggleButton1.setText("<html>Some <b>Bold</b> Text");
|
||||
toggleButton1.setText("<html>Some <b>Bold</b> Text <kbd>kbd</kbd>");
|
||||
toggleButton1.setSelected(true);
|
||||
panel1.add(toggleButton1, "cell 1 2");
|
||||
|
||||
@@ -242,7 +313,7 @@ public class FlatHtmlTest
|
||||
panel1.add(label12, "cell 0 3");
|
||||
|
||||
//---- checkBox1 ----
|
||||
checkBox1.setText("<html>Some <b>Bold</b> Text");
|
||||
checkBox1.setText("<html>Some <b>Bold</b> Text <kbd>kbd</kbd>");
|
||||
panel1.add(checkBox1, "cell 1 3");
|
||||
|
||||
//---- checkBox2 ----
|
||||
@@ -254,7 +325,7 @@ public class FlatHtmlTest
|
||||
panel1.add(label13, "cell 0 4");
|
||||
|
||||
//---- radioButton1 ----
|
||||
radioButton1.setText("<html>Some <b>Bold</b> Text");
|
||||
radioButton1.setText("<html>Some <b>Bold</b> Text <kbd>kbd</kbd>");
|
||||
panel1.add(radioButton1, "cell 1 4");
|
||||
|
||||
//---- radioButton2 ----
|
||||
@@ -267,7 +338,7 @@ public class FlatHtmlTest
|
||||
|
||||
//======== menu1 ========
|
||||
{
|
||||
menu1.setText("<html>Some <b>Bold</b> Text");
|
||||
menu1.setText("<html>Some <b>Bold</b> Text <kbd>kbd</kbd>");
|
||||
}
|
||||
panel1.add(menu1, "cell 1 5");
|
||||
|
||||
@@ -282,7 +353,7 @@ public class FlatHtmlTest
|
||||
panel1.add(label4, "cell 0 6");
|
||||
|
||||
//---- menuItem1 ----
|
||||
menuItem1.setText("<html>Some <b>Bold</b> Text");
|
||||
menuItem1.setText("<html>Some <b>Bold</b> Text <kbd>kbd</kbd>");
|
||||
panel1.add(menuItem1, "cell 1 6");
|
||||
|
||||
//---- menuItem2 ----
|
||||
@@ -294,7 +365,7 @@ public class FlatHtmlTest
|
||||
panel1.add(label9, "cell 0 7");
|
||||
|
||||
//---- checkBoxMenuItem1 ----
|
||||
checkBoxMenuItem1.setText("<html>Some <b>Bold</b> Text");
|
||||
checkBoxMenuItem1.setText("<html>Some <b>Bold</b> Text <kbd>kbd</kbd>");
|
||||
checkBoxMenuItem1.setSelected(true);
|
||||
panel1.add(checkBoxMenuItem1, "cell 1 7");
|
||||
|
||||
@@ -308,7 +379,7 @@ public class FlatHtmlTest
|
||||
panel1.add(label10, "cell 0 8");
|
||||
|
||||
//---- radioButtonMenuItem1 ----
|
||||
radioButtonMenuItem1.setText("<html>Some <b>Bold</b> Text");
|
||||
radioButtonMenuItem1.setText("<html>Some <b>Bold</b> Text <kbd>kbd</kbd>");
|
||||
radioButtonMenuItem1.setSelected(true);
|
||||
panel1.add(radioButtonMenuItem1, "cell 1 8");
|
||||
|
||||
@@ -321,15 +392,13 @@ public class FlatHtmlTest
|
||||
label14.setText("JToolTip:");
|
||||
panel1.add(label14, "cell 0 9");
|
||||
|
||||
//---- label15 ----
|
||||
label15.setText("(move mouse here)");
|
||||
label15.setToolTipText("<html>Some <b>Bold</b> Text");
|
||||
panel1.add(label15, "cell 1 9");
|
||||
//---- toolTip3 ----
|
||||
toolTip3.setTipText("<html>Some <b>Bold</b> Text <kbd>kbd</kbd>");
|
||||
panel1.add(toolTip3, "cell 1 9");
|
||||
|
||||
//---- label16 ----
|
||||
label16.setText("(move mouse here)");
|
||||
label16.setToolTipText("Some text");
|
||||
panel1.add(label16, "cell 2 9");
|
||||
//---- toolTip4 ----
|
||||
toolTip4.setTipText("Some text");
|
||||
panel1.add(toolTip4, "cell 2 9");
|
||||
|
||||
//---- label17 ----
|
||||
label17.setText("JComboBox:");
|
||||
@@ -337,7 +406,7 @@ public class FlatHtmlTest
|
||||
|
||||
//---- comboBox1 ----
|
||||
comboBox1.setModel(new DefaultComboBoxModel<>(new String[] {
|
||||
"<html>Some <b>Bold</b> Text",
|
||||
"<html>Some <b>Bold</b> Text <kbd>kbd</kbd>",
|
||||
"abc",
|
||||
"def"
|
||||
}));
|
||||
@@ -351,19 +420,76 @@ public class FlatHtmlTest
|
||||
}));
|
||||
panel1.add(comboBox2, "cell 2 10");
|
||||
|
||||
//---- label56 ----
|
||||
label56.setText("JXBusyLabel:");
|
||||
panel1.add(label56, "cell 0 11");
|
||||
|
||||
//---- xBusyLabel1 ----
|
||||
xBusyLabel1.setText("<html>Some <b>Bold</b> Text <kbd>kbd</kbd>");
|
||||
panel1.add(xBusyLabel1, "cell 1 11");
|
||||
|
||||
//---- xBusyLabel2 ----
|
||||
xBusyLabel2.setText("Some text");
|
||||
panel1.add(xBusyLabel2, "cell 2 11");
|
||||
|
||||
//---- label18 ----
|
||||
label18.setText("JXHyperlink:");
|
||||
panel1.add(label18, "cell 0 11");
|
||||
panel1.add(label18, "cell 0 12");
|
||||
|
||||
//---- xHyperlink1 ----
|
||||
xHyperlink1.setText("<html>Some <b>Bold</b> Text");
|
||||
panel1.add(xHyperlink1, "cell 1 11");
|
||||
xHyperlink1.setText("<html>Some <b>Bold</b> Text <kbd>kbd</kbd>");
|
||||
panel1.add(xHyperlink1, "cell 1 12");
|
||||
|
||||
//---- xHyperlink2 ----
|
||||
xHyperlink2.setText("Some text");
|
||||
panel1.add(xHyperlink2, "cell 2 11");
|
||||
panel1.add(xHyperlink2, "cell 2 12");
|
||||
|
||||
//---- label33 ----
|
||||
label33.setText("JideLabel:");
|
||||
panel1.add(label33, "cell 0 13");
|
||||
|
||||
//---- jideLabel1 ----
|
||||
jideLabel1.setText("<html>Some <b>Bold</b> Text <kbd>kbd</kbd>");
|
||||
panel1.add(jideLabel1, "cell 1 13");
|
||||
|
||||
//---- jideLabel2 ----
|
||||
jideLabel2.setText("Some text");
|
||||
panel1.add(jideLabel2, "cell 2 13");
|
||||
|
||||
//---- label16 ----
|
||||
label16.setText("JideButton:");
|
||||
panel1.add(label16, "cell 0 14");
|
||||
|
||||
//---- jideButton1 ----
|
||||
jideButton1.setText("<html>Some <b>Bold</b> Text <kbd>kbd</kbd>");
|
||||
panel1.add(jideButton1, "cell 1 14");
|
||||
|
||||
//---- jideButton2 ----
|
||||
jideButton2.setText("Some text");
|
||||
panel1.add(jideButton2, "cell 2 14");
|
||||
|
||||
//---- label54 ----
|
||||
label54.setText("JideToggleButton:");
|
||||
panel1.add(label54, "cell 0 15");
|
||||
|
||||
//---- jideToggleButton1 ----
|
||||
jideToggleButton1.setText("<html>Some <b>Bold</b> Text <kbd>kbd</kbd>");
|
||||
panel1.add(jideToggleButton1, "cell 1 15");
|
||||
|
||||
//---- jideToggleButton2 ----
|
||||
jideToggleButton2.setText("Some text");
|
||||
panel1.add(jideToggleButton2, "cell 2 15");
|
||||
|
||||
//---- changeHtmlTextButton ----
|
||||
changeHtmlTextButton.setText("Change HTML Text");
|
||||
changeHtmlTextButton.addActionListener(e -> changeHtmlText());
|
||||
panel1.add(changeHtmlTextButton, "cell 0 16");
|
||||
|
||||
//---- label15 ----
|
||||
label15.setText("(use to check whether CSS is updated on text changes)");
|
||||
panel1.add(label15, "cell 0 17 3 1");
|
||||
}
|
||||
add(panel1, "cell 4 0 1 2,aligny top,growy 0");
|
||||
add(panel1, "cell 4 0 1 3,aligny top,growy 0");
|
||||
|
||||
//---- label1 ----
|
||||
label1.setText("<html>HTML<br>Sample <b>content</b><br> <u>text</u> with <a href=\"#\">link</a><h1>Header 1</h1><h2>Header 2</h2><h3>Header 3</h3><h4>Header 4</h4><h5>Header 5</h5><h6>Header 6</h6><p>Paragraph</p><address>Address</address><hr><table border=\"1\"><tr><th>Col 1</th><th>Col 2</th></tr><tr><td>abc</td><td>def</td></tr></table><ul><li>item 1</li><li>item 2</li></ul></html>");
|
||||
@@ -441,10 +567,6 @@ public class FlatHtmlTest
|
||||
"[]" +
|
||||
"[]" +
|
||||
"[]" +
|
||||
"[]para" +
|
||||
"[]para" +
|
||||
"[]" +
|
||||
"[]" +
|
||||
"[]"));
|
||||
|
||||
//---- label22 ----
|
||||
@@ -582,20 +704,8 @@ public class FlatHtmlTest
|
||||
//---- label48 ----
|
||||
label48.setText("<html><address>address</address></html>");
|
||||
panel2.add(label48, "cell 1 5");
|
||||
|
||||
//---- label54 ----
|
||||
label54.setText("Test whether inserted rule affects display:");
|
||||
panel2.add(label54, "cell 0 7 7 1");
|
||||
|
||||
//---- label56 ----
|
||||
label56.setText("<html><head><style>body { color: red }</style></head>leading <big>red</big> trailing</html>");
|
||||
panel2.add(label56, "cell 0 8 7 1");
|
||||
|
||||
//---- label57 ----
|
||||
label57.setText("<html><style>body { color: red }</style><p>leading <big>red</big> trailing</p></html>");
|
||||
panel2.add(label57, "cell 0 9 7 1");
|
||||
}
|
||||
add(panel2, "cell 4 2");
|
||||
add(panel2, "cell 4 0 1 3");
|
||||
// JFormDesigner - End of component initialization //GEN-END:initComponents
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
JFDML JFormDesigner: "7.0.3.1.342" Java: "15" encoding: "UTF-8"
|
||||
JFDML JFormDesigner: "8.2.2.0.9999" Java: "21.0.1" encoding: "UTF-8"
|
||||
|
||||
new FormModel {
|
||||
contentType: "form/swing"
|
||||
@@ -7,7 +7,7 @@ new FormModel {
|
||||
"JavaCodeGenerator.defaultVariableLocal": true
|
||||
}
|
||||
add( new FormContainer( "com.formdev.flatlaf.testing.FlatTestPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) {
|
||||
"$layoutConstraints": "ltr,insets dialog,hidemode 3"
|
||||
"$layoutConstraints": "flowy,ltr,insets dialog,hidemode 3"
|
||||
"$columnConstraints": "[grow,sizegroup 1,fill][grow,sizegroup 1,fill][grow,sizegroup 1,fill][grow,sizegroup 1,fill][fill]"
|
||||
"$rowConstraints": "[][fill][grow,fill]"
|
||||
} ) {
|
||||
@@ -39,7 +39,7 @@ new FormModel {
|
||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) {
|
||||
"$layoutConstraints": "insets 0,hidemode 3"
|
||||
"$columnConstraints": "[fill][fill][fill]"
|
||||
"$rowConstraints": "[][][][][][][][][][][][]"
|
||||
"$rowConstraints": "[][][][][][][][][][][]unrel[][]unrel[][][]para[][]"
|
||||
} ) {
|
||||
name: "panel1"
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
@@ -50,7 +50,7 @@ new FormModel {
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "label6"
|
||||
"text": "<html>Some <b>Bold</b> Text"
|
||||
"text": "<html>Some <b>Bold</b> Text <kbd>kbd</kbd>"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 1 0"
|
||||
} )
|
||||
@@ -62,13 +62,13 @@ new FormModel {
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "label3"
|
||||
"text": "JButon:"
|
||||
"text": "JButton:"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 1"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JButton" ) {
|
||||
name: "button1"
|
||||
"text": "<html>Some <b>Bold</b> Text"
|
||||
"text": "<html>Some <b>Bold</b> Text <kbd>kbd</kbd>"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 1 1"
|
||||
} )
|
||||
@@ -86,7 +86,7 @@ new FormModel {
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JToggleButton" ) {
|
||||
name: "toggleButton1"
|
||||
"text": "<html>Some <b>Bold</b> Text"
|
||||
"text": "<html>Some <b>Bold</b> Text <kbd>kbd</kbd>"
|
||||
"selected": true
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 1 2"
|
||||
@@ -106,7 +106,7 @@ new FormModel {
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JCheckBox" ) {
|
||||
name: "checkBox1"
|
||||
"text": "<html>Some <b>Bold</b> Text"
|
||||
"text": "<html>Some <b>Bold</b> Text <kbd>kbd</kbd>"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 1 3"
|
||||
} )
|
||||
@@ -124,7 +124,7 @@ new FormModel {
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JRadioButton" ) {
|
||||
name: "radioButton1"
|
||||
"text": "<html>Some <b>Bold</b> Text"
|
||||
"text": "<html>Some <b>Bold</b> Text <kbd>kbd</kbd>"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 1 4"
|
||||
} )
|
||||
@@ -142,7 +142,7 @@ new FormModel {
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JMenu", new FormLayoutManager( class javax.swing.JMenu ) ) {
|
||||
name: "menu1"
|
||||
"text": "<html>Some <b>Bold</b> Text"
|
||||
"text": "<html>Some <b>Bold</b> Text <kbd>kbd</kbd>"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 1 5"
|
||||
} )
|
||||
@@ -160,7 +160,7 @@ new FormModel {
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JMenuItem" ) {
|
||||
name: "menuItem1"
|
||||
"text": "<html>Some <b>Bold</b> Text"
|
||||
"text": "<html>Some <b>Bold</b> Text <kbd>kbd</kbd>"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 1 6"
|
||||
} )
|
||||
@@ -178,7 +178,7 @@ new FormModel {
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JCheckBoxMenuItem" ) {
|
||||
name: "checkBoxMenuItem1"
|
||||
"text": "<html>Some <b>Bold</b> Text"
|
||||
"text": "<html>Some <b>Bold</b> Text <kbd>kbd</kbd>"
|
||||
"selected": true
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 1 7"
|
||||
@@ -198,7 +198,7 @@ new FormModel {
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JRadioButtonMenuItem" ) {
|
||||
name: "radioButtonMenuItem1"
|
||||
"text": "<html>Some <b>Bold</b> Text"
|
||||
"text": "<html>Some <b>Bold</b> Text <kbd>kbd</kbd>"
|
||||
"selected": true
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 1 8"
|
||||
@@ -216,17 +216,15 @@ new FormModel {
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 9"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "label15"
|
||||
"text": "(move mouse here)"
|
||||
"toolTipText": "<html>Some <b>Bold</b> Text"
|
||||
add( new FormComponent( "javax.swing.JToolTip" ) {
|
||||
name: "toolTip3"
|
||||
"tipText": "<html>Some <b>Bold</b> Text <kbd>kbd</kbd>"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 1 9"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "label16"
|
||||
"text": "(move mouse here)"
|
||||
"toolTipText": "Some text"
|
||||
add( new FormComponent( "javax.swing.JToolTip" ) {
|
||||
name: "toolTip4"
|
||||
"tipText": "Some text"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 2 9"
|
||||
} )
|
||||
@@ -239,8 +237,8 @@ new FormModel {
|
||||
add( new FormComponent( "javax.swing.JComboBox" ) {
|
||||
name: "comboBox1"
|
||||
"model": new javax.swing.DefaultComboBoxModel {
|
||||
selectedItem: "<html>Some <b>Bold</b> Text"
|
||||
addElement( "<html>Some <b>Bold</b> Text" )
|
||||
selectedItem: "<html>Some <b>Bold</b> Text <kbd>kbd</kbd>"
|
||||
addElement( "<html>Some <b>Bold</b> Text <kbd>kbd</kbd>" )
|
||||
addElement( "abc" )
|
||||
addElement( "def" )
|
||||
}
|
||||
@@ -259,25 +257,110 @@ new FormModel {
|
||||
"value": "cell 2 10"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "label18"
|
||||
"text": "JXHyperlink:"
|
||||
name: "label56"
|
||||
"text": "JXBusyLabel:"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 11"
|
||||
} )
|
||||
add( new FormComponent( "org.jdesktop.swingx.JXHyperlink" ) {
|
||||
name: "xHyperlink1"
|
||||
"text": "<html>Some <b>Bold</b> Text"
|
||||
add( new FormComponent( "org.jdesktop.swingx.JXBusyLabel" ) {
|
||||
name: "xBusyLabel1"
|
||||
"text": "<html>Some <b>Bold</b> Text <kbd>kbd</kbd>"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 1 11"
|
||||
} )
|
||||
add( new FormComponent( "org.jdesktop.swingx.JXBusyLabel" ) {
|
||||
name: "xBusyLabel2"
|
||||
"text": "Some text"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 2 11"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "label18"
|
||||
"text": "JXHyperlink:"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 12"
|
||||
} )
|
||||
add( new FormComponent( "org.jdesktop.swingx.JXHyperlink" ) {
|
||||
name: "xHyperlink1"
|
||||
"text": "<html>Some <b>Bold</b> Text <kbd>kbd</kbd>"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 1 12"
|
||||
} )
|
||||
add( new FormComponent( "org.jdesktop.swingx.JXHyperlink" ) {
|
||||
name: "xHyperlink2"
|
||||
"text": "Some text"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 2 11"
|
||||
"value": "cell 2 12"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "label33"
|
||||
"text": "JideLabel:"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 13"
|
||||
} )
|
||||
add( new FormComponent( "com.jidesoft.swing.JideLabel" ) {
|
||||
name: "jideLabel1"
|
||||
"text": "<html>Some <b>Bold</b> Text <kbd>kbd</kbd>"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 1 13"
|
||||
} )
|
||||
add( new FormComponent( "com.jidesoft.swing.JideLabel" ) {
|
||||
name: "jideLabel2"
|
||||
"text": "Some text"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 2 13"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "label16"
|
||||
"text": "JideButton:"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 14"
|
||||
} )
|
||||
add( new FormComponent( "com.jidesoft.swing.JideButton" ) {
|
||||
name: "jideButton1"
|
||||
"text": "<html>Some <b>Bold</b> Text <kbd>kbd</kbd>"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 1 14"
|
||||
} )
|
||||
add( new FormComponent( "com.jidesoft.swing.JideButton" ) {
|
||||
name: "jideButton2"
|
||||
"text": "Some text"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 2 14"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "label54"
|
||||
"text": "JideToggleButton:"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 15"
|
||||
} )
|
||||
add( new FormComponent( "com.jidesoft.swing.JideToggleButton" ) {
|
||||
name: "jideToggleButton1"
|
||||
"text": "<html>Some <b>Bold</b> Text <kbd>kbd</kbd>"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 1 15"
|
||||
} )
|
||||
add( new FormComponent( "com.jidesoft.swing.JideToggleButton" ) {
|
||||
name: "jideToggleButton2"
|
||||
"text": "Some text"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 2 15"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JButton" ) {
|
||||
name: "changeHtmlTextButton"
|
||||
"text": "Change HTML Text"
|
||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "changeHtmlText", false ) )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 16"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "label15"
|
||||
"text": "(use to check whether CSS is updated on text changes)"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 17 3 1"
|
||||
} )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 4 0 1 2,aligny top,growy 0"
|
||||
"value": "cell 4 0 1 3,aligny top,growy 0"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "label1"
|
||||
@@ -372,7 +455,7 @@ new FormModel {
|
||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) {
|
||||
"$layoutConstraints": "insets 0,hidemode 3"
|
||||
"$columnConstraints": "[fill]para[fill][fill][fill][fill][fill][fill]"
|
||||
"$rowConstraints": "[][][][][][]para[]para[][][]"
|
||||
"$rowConstraints": "[][][][][][]"
|
||||
} ) {
|
||||
name: "panel2"
|
||||
auxiliary() {
|
||||
@@ -582,30 +665,12 @@ new FormModel {
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 1 5"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "label54"
|
||||
"text": "Test whether inserted rule affects display:"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 7 7 1"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "label56"
|
||||
"text": "<html><head><style>body { color: red }</style></head>leading <big>red</big> trailing</html>"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 8 7 1"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "label57"
|
||||
"text": "<html><style>body { color: red }</style><p>leading <big>red</big> trailing</p></html>"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 9 7 1"
|
||||
} )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 4 2"
|
||||
"value": "cell 4 0 1 3"
|
||||
} )
|
||||
}, new FormLayoutConstraints( null ) {
|
||||
"location": new java.awt.Point( 0, 0 )
|
||||
"size": new java.awt.Dimension( 905, 815 )
|
||||
"size": new java.awt.Dimension( 905, 880 )
|
||||
} )
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user