mirror of
https://github.com/JFormDesigner/FlatLaf.git
synced 2026-02-13 23:37:13 -06:00
ComboBox: fixed issues with NetBeans org.openide.awt.ColorComboBox component
This commit is contained in:
@@ -10,6 +10,8 @@ FlatLaf Change Log
|
|||||||
check whether the current look and feel is FlatLaf.
|
check whether the current look and feel is FlatLaf.
|
||||||
- Fixed selection background of checkbox in table cell.
|
- Fixed selection background of checkbox in table cell.
|
||||||
- Fixed jittery submenu rendering on Mac. (issue #10)
|
- Fixed jittery submenu rendering on Mac. (issue #10)
|
||||||
|
- ComboBox: Fixed issues with NetBeans `org.openide.awt.ColorComboBox`
|
||||||
|
component.
|
||||||
- Hex color values in `.properties` files now must start with a `#` character.
|
- Hex color values in `.properties` files now must start with a `#` character.
|
||||||
- SwingX: Fixed too wide border when using date picker as table cell editor.
|
- SwingX: Fixed too wide border when using date picker as table cell editor.
|
||||||
(issue #24)
|
(issue #24)
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ import java.awt.event.MouseListener;
|
|||||||
import java.awt.geom.Rectangle2D;
|
import java.awt.geom.Rectangle2D;
|
||||||
import java.beans.PropertyChangeEvent;
|
import java.beans.PropertyChangeEvent;
|
||||||
import java.beans.PropertyChangeListener;
|
import java.beans.PropertyChangeListener;
|
||||||
|
import java.lang.ref.WeakReference;
|
||||||
import javax.swing.BorderFactory;
|
import javax.swing.BorderFactory;
|
||||||
import javax.swing.JButton;
|
import javax.swing.JButton;
|
||||||
import javax.swing.JComboBox;
|
import javax.swing.JComboBox;
|
||||||
@@ -107,6 +108,8 @@ public class FlatComboBoxUI
|
|||||||
private MouseListener hoverListener;
|
private MouseListener hoverListener;
|
||||||
private boolean hover;
|
private boolean hover;
|
||||||
|
|
||||||
|
private WeakReference<Component> lastRendererComponent;
|
||||||
|
|
||||||
public static ComponentUI createUI( JComponent c ) {
|
public static ComponentUI createUI( JComponent c ) {
|
||||||
return new FlatComboBoxUI();
|
return new FlatComboBoxUI();
|
||||||
}
|
}
|
||||||
@@ -342,11 +345,11 @@ public class FlatComboBoxUI
|
|||||||
@SuppressWarnings( "unchecked" )
|
@SuppressWarnings( "unchecked" )
|
||||||
public void paintCurrentValue( Graphics g, Rectangle bounds, boolean hasFocus ) {
|
public void paintCurrentValue( Graphics g, Rectangle bounds, boolean hasFocus ) {
|
||||||
ListCellRenderer<Object> renderer = comboBox.getRenderer();
|
ListCellRenderer<Object> renderer = comboBox.getRenderer();
|
||||||
CellPaddingBorder.uninstall( renderer );
|
uninstallCellPaddingBorder( renderer );
|
||||||
Component c = renderer.getListCellRendererComponent( listBox, comboBox.getSelectedItem(), -1, false, false );
|
Component c = renderer.getListCellRendererComponent( listBox, comboBox.getSelectedItem(), -1, false, false );
|
||||||
c.setFont( comboBox.getFont() );
|
c.setFont( comboBox.getFont() );
|
||||||
c.applyComponentOrientation( comboBox.getComponentOrientation() );
|
c.applyComponentOrientation( comboBox.getComponentOrientation() );
|
||||||
CellPaddingBorder.uninstall( c );
|
uninstallCellPaddingBorder( c );
|
||||||
|
|
||||||
boolean enabled = comboBox.isEnabled();
|
boolean enabled = comboBox.isEnabled();
|
||||||
c.setForeground( enabled ? comboBox.getForeground() : disabledForeground );
|
c.setForeground( enabled ? comboBox.getForeground() : disabledForeground );
|
||||||
@@ -375,6 +378,30 @@ public class FlatComboBoxUI
|
|||||||
return isIntelliJTheme ? FlatUIUtils.getParentBackground( c ) : disabledBackground;
|
return isIntelliJTheme ? FlatUIUtils.getParentBackground( c ) : disabledBackground;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Dimension getDefaultSize() {
|
||||||
|
@SuppressWarnings( "unchecked" )
|
||||||
|
ListCellRenderer<Object> renderer = comboBox.getRenderer();
|
||||||
|
uninstallCellPaddingBorder( renderer );
|
||||||
|
|
||||||
|
Dimension size = super.getDefaultSize();
|
||||||
|
|
||||||
|
uninstallCellPaddingBorder( renderer );
|
||||||
|
return size;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Dimension getDisplaySize() {
|
||||||
|
@SuppressWarnings( "unchecked" )
|
||||||
|
ListCellRenderer<Object> renderer = comboBox.getRenderer();
|
||||||
|
uninstallCellPaddingBorder( renderer );
|
||||||
|
|
||||||
|
Dimension displaySize = super.getDisplaySize();
|
||||||
|
|
||||||
|
uninstallCellPaddingBorder( renderer );
|
||||||
|
return displaySize;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Dimension getSizeForComponent( Component comp ) {
|
protected Dimension getSizeForComponent( Component comp ) {
|
||||||
Dimension size = super.getSizeForComponent( comp );
|
Dimension size = super.getSizeForComponent( comp );
|
||||||
@@ -398,6 +425,14 @@ public class FlatComboBoxUI
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void uninstallCellPaddingBorder( Object o ) {
|
||||||
|
CellPaddingBorder.uninstall( o );
|
||||||
|
if( lastRendererComponent != null ) {
|
||||||
|
CellPaddingBorder.uninstall( lastRendererComponent );
|
||||||
|
lastRendererComponent = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//---- class FlatComboPopup -----------------------------------------------
|
//---- class FlatComboPopup -----------------------------------------------
|
||||||
|
|
||||||
@SuppressWarnings( { "rawtypes", "unchecked" } )
|
@SuppressWarnings( { "rawtypes", "unchecked" } )
|
||||||
@@ -481,6 +516,7 @@ public class FlatComboBoxUI
|
|||||||
{
|
{
|
||||||
ListCellRenderer renderer = comboBox.getRenderer();
|
ListCellRenderer renderer = comboBox.getRenderer();
|
||||||
CellPaddingBorder.uninstall( renderer );
|
CellPaddingBorder.uninstall( renderer );
|
||||||
|
CellPaddingBorder.uninstall( lastRendererComponent );
|
||||||
|
|
||||||
Component c = renderer.getListCellRendererComponent( list, value, index, isSelected, cellHasFocus );
|
Component c = renderer.getListCellRendererComponent( list, value, index, isSelected, cellHasFocus );
|
||||||
c.applyComponentOrientation( comboBox.getComponentOrientation() );
|
c.applyComponentOrientation( comboBox.getComponentOrientation() );
|
||||||
@@ -491,6 +527,8 @@ public class FlatComboBoxUI
|
|||||||
paddingBorder.install( (JComponent) c );
|
paddingBorder.install( (JComponent) c );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
lastRendererComponent = (c != renderer) ? new WeakReference<>( c ) : null;
|
||||||
|
|
||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -525,6 +563,9 @@ public class FlatComboBoxUI
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void uninstall( Object o ) {
|
static void uninstall( Object o ) {
|
||||||
|
if( o instanceof WeakReference )
|
||||||
|
o = ((WeakReference<?>)o).get();
|
||||||
|
|
||||||
if( !(o instanceof JComponent) )
|
if( !(o instanceof JComponent) )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ dependencies {
|
|||||||
implementation( "org.swinglabs.swingx:swingx-all:1.6.5-1" )
|
implementation( "org.swinglabs.swingx:swingx-all:1.6.5-1" )
|
||||||
implementation( "org.swinglabs.swingx:swingx-beaninfo:1.6.5-1" )
|
implementation( "org.swinglabs.swingx:swingx-beaninfo:1.6.5-1" )
|
||||||
implementation( "com.jidesoft:jide-oss:3.6.18" )
|
implementation( "com.jidesoft:jide-oss:3.6.18" )
|
||||||
|
implementation( "org.netbeans.api:org-openide-awt:RELEASE112" )
|
||||||
}
|
}
|
||||||
|
|
||||||
java {
|
java {
|
||||||
|
|||||||
@@ -0,0 +1,110 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2019 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
|
||||||
|
*
|
||||||
|
* http://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.testing.netbeans;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
|
import javax.swing.*;
|
||||||
|
import com.formdev.flatlaf.testing.*;
|
||||||
|
import com.formdev.flatlaf.testing.FlatTestFrame;
|
||||||
|
import net.miginfocom.swing.*;
|
||||||
|
import org.openide.awt.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Karl Tauber
|
||||||
|
*/
|
||||||
|
public class FlatNetBeansTest
|
||||||
|
extends FlatTestPanel
|
||||||
|
{
|
||||||
|
public static void main( String[] args ) {
|
||||||
|
SwingUtilities.invokeLater( () -> {
|
||||||
|
FlatTestFrame frame = FlatTestFrame.create( args, "FlatNetBeansTest" );
|
||||||
|
frame.showFrame( FlatNetBeansTest::new );
|
||||||
|
} );
|
||||||
|
}
|
||||||
|
|
||||||
|
FlatNetBeansTest() {
|
||||||
|
initComponents();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void initComponents() {
|
||||||
|
// JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents
|
||||||
|
JLabel colorComboBoxLabel = new JLabel();
|
||||||
|
ColorComboBox colorComboBox1 = new ColorComboBox();
|
||||||
|
JComboBox<String> comboBox4 = new JComboBox<>();
|
||||||
|
ColorComboBox colorComboBox2 = new ColorComboBox();
|
||||||
|
JComboBox<String> comboBox3 = new JComboBox<>();
|
||||||
|
|
||||||
|
//======== this ========
|
||||||
|
setLayout(new MigLayout(
|
||||||
|
"insets dialog,hidemode 3",
|
||||||
|
// columns
|
||||||
|
"[]" +
|
||||||
|
"[fill]" +
|
||||||
|
"[fill]",
|
||||||
|
// rows
|
||||||
|
"[]" +
|
||||||
|
"[]" +
|
||||||
|
"[]"));
|
||||||
|
|
||||||
|
//---- colorComboBoxLabel ----
|
||||||
|
colorComboBoxLabel.setText("ColorComboBox:");
|
||||||
|
add(colorComboBoxLabel, "cell 0 0");
|
||||||
|
add(colorComboBox1, "cell 1 0");
|
||||||
|
|
||||||
|
//---- comboBox4 ----
|
||||||
|
comboBox4.setModel(new DefaultComboBoxModel<>(new String[] {
|
||||||
|
"JComboBox",
|
||||||
|
"a",
|
||||||
|
"bb",
|
||||||
|
"ccc",
|
||||||
|
"dd",
|
||||||
|
"e",
|
||||||
|
"ff",
|
||||||
|
"ggg",
|
||||||
|
"hh",
|
||||||
|
"i",
|
||||||
|
"jj",
|
||||||
|
"kkk"
|
||||||
|
}));
|
||||||
|
add(comboBox4, "cell 2 0,growx");
|
||||||
|
|
||||||
|
//---- colorComboBox2 ----
|
||||||
|
colorComboBox2.setSelectedColor(new Color(176, 62, 62));
|
||||||
|
add(colorComboBox2, "cell 1 1");
|
||||||
|
|
||||||
|
//---- comboBox3 ----
|
||||||
|
comboBox3.setModel(new DefaultComboBoxModel<>(new String[] {
|
||||||
|
"JComboBox",
|
||||||
|
"a",
|
||||||
|
"bb",
|
||||||
|
"ccc",
|
||||||
|
"dd",
|
||||||
|
"e",
|
||||||
|
"ff",
|
||||||
|
"ggg",
|
||||||
|
"hh",
|
||||||
|
"i",
|
||||||
|
"jj",
|
||||||
|
"kkk"
|
||||||
|
}));
|
||||||
|
add(comboBox3, "cell 1 2,growx");
|
||||||
|
// JFormDesigner - End of component initialization //GEN-END:initComponents
|
||||||
|
}
|
||||||
|
|
||||||
|
// JFormDesigner - Variables declaration - DO NOT MODIFY //GEN-BEGIN:variables
|
||||||
|
// JFormDesigner - End of variables declaration //GEN-END:variables
|
||||||
|
}
|
||||||
@@ -0,0 +1,63 @@
|
|||||||
|
JFDML JFormDesigner: "7.0.0.0.194" Java: "11.0.2" encoding: "UTF-8"
|
||||||
|
|
||||||
|
new FormModel {
|
||||||
|
contentType: "form/swing"
|
||||||
|
root: new FormRoot {
|
||||||
|
auxiliary() {
|
||||||
|
"JavaCodeGenerator.defaultVariableLocal": true
|
||||||
|
}
|
||||||
|
add( new FormContainer( "com.formdev.flatlaf.testing.FlatTestPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) {
|
||||||
|
"$layoutConstraints": "insets dialog,hidemode 3"
|
||||||
|
"$columnConstraints": "[][fill][fill]"
|
||||||
|
"$rowConstraints": "[][][]"
|
||||||
|
} ) {
|
||||||
|
name: "this"
|
||||||
|
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||||
|
name: "colorComboBoxLabel"
|
||||||
|
"text": "ColorComboBox:"
|
||||||
|
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||||
|
"value": "cell 0 0"
|
||||||
|
} )
|
||||||
|
add( new FormComponent( "org.openide.awt.ColorComboBox" ) {
|
||||||
|
name: "colorComboBox1"
|
||||||
|
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||||
|
"value": "cell 1 0"
|
||||||
|
} )
|
||||||
|
add( new FormComponent( "javax.swing.JComboBox" ) {
|
||||||
|
name: "comboBox4"
|
||||||
|
"model": &DefaultComboBoxModel0 new javax.swing.DefaultComboBoxModel {
|
||||||
|
selectedItem: "JComboBox"
|
||||||
|
addElement( "JComboBox" )
|
||||||
|
addElement( "a" )
|
||||||
|
addElement( "bb" )
|
||||||
|
addElement( "ccc" )
|
||||||
|
addElement( "dd" )
|
||||||
|
addElement( "e" )
|
||||||
|
addElement( "ff" )
|
||||||
|
addElement( "ggg" )
|
||||||
|
addElement( "hh" )
|
||||||
|
addElement( "i" )
|
||||||
|
addElement( "jj" )
|
||||||
|
addElement( "kkk" )
|
||||||
|
}
|
||||||
|
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||||
|
"value": "cell 2 0,growx"
|
||||||
|
} )
|
||||||
|
add( new FormComponent( "org.openide.awt.ColorComboBox" ) {
|
||||||
|
name: "colorComboBox2"
|
||||||
|
"selectedColor": new java.awt.Color( 176, 62, 62, 255 )
|
||||||
|
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||||
|
"value": "cell 1 1"
|
||||||
|
} )
|
||||||
|
add( new FormComponent( "javax.swing.JComboBox" ) {
|
||||||
|
name: "comboBox3"
|
||||||
|
"model": #DefaultComboBoxModel0
|
||||||
|
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||||
|
"value": "cell 1 2,growx"
|
||||||
|
} )
|
||||||
|
}, new FormLayoutConstraints( null ) {
|
||||||
|
"location": new java.awt.Point( 0, 0 )
|
||||||
|
"size": new java.awt.Dimension( 500, 500 )
|
||||||
|
} )
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user