Extras: added extension classes for JButton and JToggleButton (issue #117)

This commit is contained in:
Karl Tauber
2020-12-11 17:18:35 +01:00
parent 821efaff40
commit 511a4044d7
6 changed files with 466 additions and 111 deletions

View File

@@ -21,6 +21,7 @@ import javax.swing.*;
import javax.swing.border.*;
import com.formdev.flatlaf.FlatClientProperties;
import com.formdev.flatlaf.extras.components.*;
import com.formdev.flatlaf.extras.components.FlatButton.ButtonType;
import net.miginfocom.swing.*;
/**
@@ -38,6 +39,8 @@ public class FlatComponentsTest
FlatComponentsTest() {
initComponents();
buttonTypeComboBox.init( ButtonType.class, true );
}
private void changeProgress() {
@@ -116,13 +119,16 @@ public class FlatComponentsTest
}
private void buttonTypeChanged() {
String buttonType = (String) buttonTypeComboBox.getSelectedItem();
if( "-".equals( buttonType ) )
buttonType = null;
ButtonType buttonType = buttonTypeComboBox.getSelectedValue();
String buttonTypeStr = (buttonType != null && buttonType != ButtonType.none) ? buttonType.toString() : null;
for( Component c : getComponents() ) {
if( c instanceof AbstractButton )
((AbstractButton)c).putClientProperty( FlatClientProperties.BUTTON_TYPE, buttonType );
if( c instanceof FlatButton )
((FlatButton)c).setButtonType( buttonType );
else if( c instanceof FlatToggleButton )
((FlatToggleButton)c).setButtonType( buttonType );
else if( c instanceof AbstractButton )
((AbstractButton)c).putClientProperty( FlatClientProperties.BUTTON_TYPE, buttonTypeStr );
}
}
@@ -154,14 +160,14 @@ public class FlatComponentsTest
FlatComponentsTest.TestMultiLineLabel testMultiLineLabel1 = new FlatComponentsTest.TestMultiLineLabel();
JLabel buttonLabel = new JLabel();
JButton button1 = new JButton();
JButton button17 = new JButton();
JButton button22 = new JButton();
FlatButton button17 = new FlatButton();
FlatButton button22 = new FlatButton();
JButton button2 = new JButton();
JButton button18 = new JButton();
JButton button23 = new JButton();
FlatButton button18 = new FlatButton();
FlatButton button23 = new FlatButton();
FlatComponentsTest.TestDefaultButton button5 = new FlatComponentsTest.TestDefaultButton();
JButton button3 = new JButton();
JButton button12 = new JButton();
FlatButton button3 = new FlatButton();
FlatButton button12 = new FlatButton();
JButton button13 = new JButton();
JButton button14 = new JButton();
JButton button15 = new JButton();
@@ -169,11 +175,11 @@ public class FlatComponentsTest
JButton button20 = new JButton();
JLabel toggleButtonLabel = new JLabel();
JToggleButton toggleButton1 = new JToggleButton();
JToggleButton toggleButton9 = new JToggleButton();
JToggleButton toggleButton19 = new JToggleButton();
FlatToggleButton toggleButton9 = new FlatToggleButton();
FlatToggleButton toggleButton19 = new FlatToggleButton();
JToggleButton toggleButton2 = new JToggleButton();
JToggleButton toggleButton10 = new JToggleButton();
JToggleButton toggleButton20 = new JToggleButton();
FlatToggleButton toggleButton10 = new FlatToggleButton();
FlatToggleButton toggleButton20 = new FlatToggleButton();
JToggleButton toggleButton3 = new JToggleButton();
JToggleButton toggleButton4 = new JToggleButton();
JToggleButton toggleButton11 = new JToggleButton();
@@ -186,8 +192,8 @@ public class FlatComponentsTest
JCheckBox checkBox2 = new JCheckBox();
JCheckBox checkBox3 = new JCheckBox();
JCheckBox checkBox4 = new JCheckBox();
JToggleButton toggleButton5 = new JToggleButton();
JToggleButton toggleButton8 = new JToggleButton();
FlatToggleButton toggleButton5 = new FlatToggleButton();
FlatToggleButton toggleButton8 = new FlatToggleButton();
JLabel radioButtonLabel = new JLabel();
JRadioButton radioButton1 = new JRadioButton();
JRadioButton radioButton2 = new JRadioButton();
@@ -281,7 +287,7 @@ public class FlatComponentsTest
JPanel panel3 = new JPanel();
JButton button21 = new JButton();
JPanel panel5 = new JPanel();
buttonTypeComboBox = new JComboBox<>();
buttonTypeComboBox = new FlatTestEnumComboBox<>();
borderPaintedCheckBox = new JCheckBox();
roundRectCheckBox = new JCheckBox();
contentAreaFilledCheckBox = new JCheckBox();
@@ -327,16 +333,16 @@ public class FlatComponentsTest
JToggleButton toggleButton17 = new JToggleButton();
JLabel label3 = new JLabel();
JToolBar toolBar3 = new JToolBar();
JButton button26 = new JButton();
JButton button27 = new JButton();
JToggleButton toggleButton23 = new JToggleButton();
JToggleButton toggleButton24 = new JToggleButton();
FlatButton button26 = new FlatButton();
FlatButton button27 = new FlatButton();
FlatToggleButton toggleButton23 = new FlatToggleButton();
FlatToggleButton toggleButton24 = new FlatToggleButton();
JLabel label4 = new JLabel();
JToolBar toolBar4 = new JToolBar();
JButton button28 = new JButton();
JButton button29 = new JButton();
JToggleButton toggleButton25 = new JToggleButton();
JToggleButton toggleButton26 = new JToggleButton();
FlatButton button28 = new FlatButton();
FlatButton button29 = new FlatButton();
FlatToggleButton toggleButton25 = new FlatToggleButton();
FlatToggleButton toggleButton26 = new FlatToggleButton();
//======== this ========
setLayout(new MigLayout(
@@ -406,14 +412,14 @@ public class FlatComponentsTest
//---- button17 ----
button17.setText("Sq");
button17.putClientProperty("JButton.buttonType", "square");
button17.putClientProperty("JComponent.minimumWidth", 0);
button17.setButtonType(FlatButton.ButtonType.square);
button17.setMinimumWidth(0);
add(button17, "cell 1 1");
//---- button22 ----
button22.setText("Rd");
button22.putClientProperty("JButton.buttonType", "roundRect");
button22.putClientProperty("JComponent.minimumWidth", 0);
button22.setButtonType(FlatButton.ButtonType.roundRect);
button22.setMinimumWidth(0);
add(button22, "cell 1 1");
//---- button2 ----
@@ -425,16 +431,16 @@ public class FlatComponentsTest
//---- button18 ----
button18.setText("Sq");
button18.putClientProperty("JButton.buttonType", "square");
button18.setButtonType(FlatButton.ButtonType.square);
button18.setEnabled(false);
button18.putClientProperty("JComponent.minimumWidth", 0);
button18.setMinimumWidth(0);
add(button18, "cell 2 1");
//---- button23 ----
button23.setText("Rd");
button23.putClientProperty("JButton.buttonType", "roundRect");
button23.setButtonType(FlatButton.ButtonType.roundRect);
button23.setEnabled(false);
button23.putClientProperty("JComponent.minimumWidth", 0);
button23.setMinimumWidth(0);
add(button23, "cell 2 1");
//---- button5 ----
@@ -445,12 +451,12 @@ public class FlatComponentsTest
//---- button3 ----
button3.setText("Help");
button3.putClientProperty("JButton.buttonType", "help");
button3.setButtonType(FlatButton.ButtonType.help);
add(button3, "cell 4 1");
//---- button12 ----
button12.setText("Help");
button12.putClientProperty("JButton.buttonType", "help");
button12.setButtonType(FlatButton.ButtonType.help);
button12.setEnabled(false);
add(button12, "cell 4 1");
@@ -485,12 +491,12 @@ public class FlatComponentsTest
//---- toggleButton9 ----
toggleButton9.setText("Sq");
toggleButton9.putClientProperty("JButton.buttonType", "square");
toggleButton9.setButtonType(FlatButton.ButtonType.square);
add(toggleButton9, "cell 1 2");
//---- toggleButton19 ----
toggleButton19.setText("Rd");
toggleButton19.putClientProperty("JButton.buttonType", "roundRect");
toggleButton19.setButtonType(FlatButton.ButtonType.roundRect);
add(toggleButton19, "cell 1 2");
//---- toggleButton2 ----
@@ -500,13 +506,13 @@ public class FlatComponentsTest
//---- toggleButton10 ----
toggleButton10.setText("Sq");
toggleButton10.putClientProperty("JButton.buttonType", "square");
toggleButton10.setButtonType(FlatButton.ButtonType.square);
toggleButton10.setEnabled(false);
add(toggleButton10, "cell 2 2");
//---- toggleButton20 ----
toggleButton20.setText("Rd");
toggleButton20.putClientProperty("JButton.buttonType", "roundRect");
toggleButton20.setButtonType(FlatButton.ButtonType.roundRect);
toggleButton20.setEnabled(false);
add(toggleButton20, "cell 2 2");
@@ -574,13 +580,13 @@ public class FlatComponentsTest
//---- toggleButton5 ----
toggleButton5.setText("Tab");
toggleButton5.putClientProperty("JButton.buttonType", "tab");
toggleButton5.setButtonType(FlatButton.ButtonType.tab);
toggleButton5.setSelected(true);
add(toggleButton5, "cell 5 3");
//---- toggleButton8 ----
toggleButton8.setText("Tab");
toggleButton8.putClientProperty("JButton.buttonType", "tab");
toggleButton8.setButtonType(FlatButton.ButtonType.tab);
toggleButton8.setEnabled(false);
toggleButton8.setSelected(true);
add(toggleButton8, "cell 5 3");
@@ -1110,13 +1116,6 @@ public class FlatComponentsTest
"[]"));
//---- buttonTypeComboBox ----
buttonTypeComboBox.setModel(new DefaultComboBoxModel<>(new String[] {
"-",
"square",
"roundRect",
"tab",
"help"
}));
buttonTypeComboBox.addActionListener(e -> buttonTypeChanged());
panel5.add(buttonTypeComboBox, "cell 0 0");
@@ -1347,24 +1346,24 @@ public class FlatComponentsTest
//---- button26 ----
button26.setIcon(UIManager.getIcon("Tree.closedIcon"));
button26.putClientProperty("JButton.buttonType", "square");
button26.setButtonType(FlatButton.ButtonType.square);
toolBar3.add(button26);
//---- button27 ----
button27.setIcon(UIManager.getIcon("Tree.openIcon"));
button27.putClientProperty("JButton.buttonType", "square");
button27.setButtonType(FlatButton.ButtonType.square);
toolBar3.add(button27);
//---- toggleButton23 ----
toggleButton23.setIcon(UIManager.getIcon("FileView.computerIcon"));
toggleButton23.setSelected(true);
toggleButton23.putClientProperty("JButton.buttonType", "square");
toggleButton23.setButtonType(FlatButton.ButtonType.square);
toolBar3.add(toggleButton23);
//---- toggleButton24 ----
toggleButton24.setIcon(UIManager.getIcon("FileView.floppyDriveIcon"));
toggleButton24.setSelected(true);
toggleButton24.putClientProperty("JButton.buttonType", "square");
toggleButton24.setButtonType(FlatButton.ButtonType.square);
toolBar3.add(toggleButton24);
}
add(toolBar3, "cell 1 23 5 1");
@@ -1378,24 +1377,24 @@ public class FlatComponentsTest
//---- button28 ----
button28.setIcon(UIManager.getIcon("Tree.closedIcon"));
button28.putClientProperty("JButton.buttonType", "roundRect");
button28.setButtonType(FlatButton.ButtonType.roundRect);
toolBar4.add(button28);
//---- button29 ----
button29.setIcon(UIManager.getIcon("Tree.openIcon"));
button29.putClientProperty("JButton.buttonType", "roundRect");
button29.setButtonType(FlatButton.ButtonType.roundRect);
toolBar4.add(button29);
//---- toggleButton25 ----
toggleButton25.setIcon(UIManager.getIcon("FileView.computerIcon"));
toggleButton25.setSelected(true);
toggleButton25.putClientProperty("JButton.buttonType", "roundRect");
toggleButton25.setButtonType(FlatButton.ButtonType.roundRect);
toolBar4.add(toggleButton25);
//---- toggleButton26 ----
toggleButton26.setIcon(UIManager.getIcon("FileView.floppyDriveIcon"));
toggleButton26.setSelected(true);
toggleButton26.putClientProperty("JButton.buttonType", "roundRect");
toggleButton26.setButtonType(FlatButton.ButtonType.roundRect);
toolBar4.add(toggleButton26);
}
add(toolBar4, "cell 1 23 5 1");
@@ -1419,7 +1418,7 @@ public class FlatComponentsTest
private JTextField textField1;
private FlatProgressBar progressBar3;
private FlatProgressBar progressBar4;
private JComboBox<String> buttonTypeComboBox;
private FlatTestEnumComboBox<ButtonType> buttonTypeComboBox;
private JCheckBox borderPaintedCheckBox;
private JCheckBox roundRectCheckBox;
private JCheckBox contentAreaFilledCheckBox;

View File

@@ -53,19 +53,19 @@ new FormModel {
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
"value": "cell 1 1"
} )
add( new FormComponent( "javax.swing.JButton" ) {
add( new FormComponent( "com.formdev.flatlaf.extras.components.FlatButton" ) {
name: "button17"
"text": "Sq"
"$client.JButton.buttonType": "square"
"$client.JComponent.minimumWidth": 0
"buttonType": enum com.formdev.flatlaf.extras.components.FlatButton$ButtonType square
"minimumWidth": 0
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
"value": "cell 1 1"
} )
add( new FormComponent( "javax.swing.JButton" ) {
add( new FormComponent( "com.formdev.flatlaf.extras.components.FlatButton" ) {
name: "button22"
"text": "Rd"
"$client.JButton.buttonType": "roundRect"
"$client.JComponent.minimumWidth": 0
"buttonType": enum com.formdev.flatlaf.extras.components.FlatButton$ButtonType roundRect
"minimumWidth": 0
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
"value": "cell 1 1"
} )
@@ -78,21 +78,21 @@ new FormModel {
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
"value": "cell 2 1"
} )
add( new FormComponent( "javax.swing.JButton" ) {
add( new FormComponent( "com.formdev.flatlaf.extras.components.FlatButton" ) {
name: "button18"
"text": "Sq"
"$client.JButton.buttonType": "square"
"buttonType": enum com.formdev.flatlaf.extras.components.FlatButton$ButtonType square
"enabled": false
"$client.JComponent.minimumWidth": 0
"minimumWidth": 0
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
"value": "cell 2 1"
} )
add( new FormComponent( "javax.swing.JButton" ) {
add( new FormComponent( "com.formdev.flatlaf.extras.components.FlatButton" ) {
name: "button23"
"text": "Rd"
"$client.JButton.buttonType": "roundRect"
"buttonType": enum com.formdev.flatlaf.extras.components.FlatButton$ButtonType roundRect
"enabled": false
"$client.JComponent.minimumWidth": 0
"minimumWidth": 0
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
"value": "cell 2 1"
} )
@@ -104,17 +104,17 @@ new FormModel {
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
"value": "cell 3 1"
} )
add( new FormComponent( "javax.swing.JButton" ) {
add( new FormComponent( "com.formdev.flatlaf.extras.components.FlatButton" ) {
name: "button3"
"text": "Help"
"$client.JButton.buttonType": "help"
"buttonType": enum com.formdev.flatlaf.extras.components.FlatButton$ButtonType help
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
"value": "cell 4 1"
} )
add( new FormComponent( "javax.swing.JButton" ) {
add( new FormComponent( "com.formdev.flatlaf.extras.components.FlatButton" ) {
name: "button12"
"text": "Help"
"$client.JButton.buttonType": "help"
"buttonType": enum com.formdev.flatlaf.extras.components.FlatButton$ButtonType help
"enabled": false
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
"value": "cell 4 1"
@@ -162,17 +162,17 @@ new FormModel {
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
"value": "cell 1 2"
} )
add( new FormComponent( "javax.swing.JToggleButton" ) {
add( new FormComponent( "com.formdev.flatlaf.extras.components.FlatToggleButton" ) {
name: "toggleButton9"
"text": "Sq"
"$client.JButton.buttonType": "square"
"buttonType": enum com.formdev.flatlaf.extras.components.FlatButton$ButtonType square
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
"value": "cell 1 2"
} )
add( new FormComponent( "javax.swing.JToggleButton" ) {
add( new FormComponent( "com.formdev.flatlaf.extras.components.FlatToggleButton" ) {
name: "toggleButton19"
"text": "Rd"
"$client.JButton.buttonType": "roundRect"
"buttonType": enum com.formdev.flatlaf.extras.components.FlatButton$ButtonType roundRect
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
"value": "cell 1 2"
} )
@@ -183,18 +183,18 @@ new FormModel {
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
"value": "cell 2 2"
} )
add( new FormComponent( "javax.swing.JToggleButton" ) {
add( new FormComponent( "com.formdev.flatlaf.extras.components.FlatToggleButton" ) {
name: "toggleButton10"
"text": "Sq"
"$client.JButton.buttonType": "square"
"buttonType": enum com.formdev.flatlaf.extras.components.FlatButton$ButtonType square
"enabled": false
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
"value": "cell 2 2"
} )
add( new FormComponent( "javax.swing.JToggleButton" ) {
add( new FormComponent( "com.formdev.flatlaf.extras.components.FlatToggleButton" ) {
name: "toggleButton20"
"text": "Rd"
"$client.JButton.buttonType": "roundRect"
"buttonType": enum com.formdev.flatlaf.extras.components.FlatButton$ButtonType roundRect
"enabled": false
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
"value": "cell 2 2"
@@ -285,18 +285,18 @@ new FormModel {
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
"value": "cell 4 3"
} )
add( new FormComponent( "javax.swing.JToggleButton" ) {
add( new FormComponent( "com.formdev.flatlaf.extras.components.FlatToggleButton" ) {
name: "toggleButton5"
"text": "Tab"
"$client.JButton.buttonType": "tab"
"buttonType": enum com.formdev.flatlaf.extras.components.FlatButton$ButtonType tab
"selected": true
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
"value": "cell 5 3"
} )
add( new FormComponent( "javax.swing.JToggleButton" ) {
add( new FormComponent( "com.formdev.flatlaf.extras.components.FlatToggleButton" ) {
name: "toggleButton8"
"text": "Tab"
"$client.JButton.buttonType": "tab"
"buttonType": enum com.formdev.flatlaf.extras.components.FlatButton$ButtonType tab
"enabled": false
"selected": true
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
@@ -963,18 +963,11 @@ new FormModel {
} ) {
name: "panel5"
"border": new javax.swing.border.TitledBorder( "Control" )
add( new FormComponent( "javax.swing.JComboBox" ) {
add( new FormComponent( "com.formdev.flatlaf.testing.FlatTestEnumComboBox" ) {
name: "buttonTypeComboBox"
"model": new javax.swing.DefaultComboBoxModel {
selectedItem: "-"
addElement( "-" )
addElement( "square" )
addElement( "roundRect" )
addElement( "tab" )
addElement( "help" )
}
auxiliary() {
"JavaCodeGenerator.variableLocal": false
"JavaCodeGenerator.typeParameters": "ButtonType"
}
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "buttonTypeChanged", false ) )
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
@@ -1317,27 +1310,27 @@ new FormModel {
} )
add( new FormContainer( "javax.swing.JToolBar", new FormLayoutManager( class javax.swing.JToolBar ) ) {
name: "toolBar3"
add( new FormComponent( "javax.swing.JButton" ) {
add( new FormComponent( "com.formdev.flatlaf.extras.components.FlatButton" ) {
name: "button26"
"icon": #SwingIcon1
"$client.JButton.buttonType": "square"
"buttonType": enum com.formdev.flatlaf.extras.components.FlatButton$ButtonType square
} )
add( new FormComponent( "javax.swing.JButton" ) {
add( new FormComponent( "com.formdev.flatlaf.extras.components.FlatButton" ) {
name: "button27"
"icon": #SwingIcon2
"$client.JButton.buttonType": "square"
"buttonType": enum com.formdev.flatlaf.extras.components.FlatButton$ButtonType square
} )
add( new FormComponent( "javax.swing.JToggleButton" ) {
add( new FormComponent( "com.formdev.flatlaf.extras.components.FlatToggleButton" ) {
name: "toggleButton23"
"icon": #SwingIcon4
"selected": true
"$client.JButton.buttonType": "square"
"buttonType": enum com.formdev.flatlaf.extras.components.FlatButton$ButtonType square
} )
add( new FormComponent( "javax.swing.JToggleButton" ) {
add( new FormComponent( "com.formdev.flatlaf.extras.components.FlatToggleButton" ) {
name: "toggleButton24"
"icon": #SwingIcon5
"selected": true
"$client.JButton.buttonType": "square"
"buttonType": enum com.formdev.flatlaf.extras.components.FlatButton$ButtonType square
} )
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
"value": "cell 1 23 5 1"
@@ -1350,27 +1343,27 @@ new FormModel {
} )
add( new FormContainer( "javax.swing.JToolBar", new FormLayoutManager( class javax.swing.JToolBar ) ) {
name: "toolBar4"
add( new FormComponent( "javax.swing.JButton" ) {
add( new FormComponent( "com.formdev.flatlaf.extras.components.FlatButton" ) {
name: "button28"
"icon": #SwingIcon1
"$client.JButton.buttonType": "roundRect"
"buttonType": enum com.formdev.flatlaf.extras.components.FlatButton$ButtonType roundRect
} )
add( new FormComponent( "javax.swing.JButton" ) {
add( new FormComponent( "com.formdev.flatlaf.extras.components.FlatButton" ) {
name: "button29"
"icon": #SwingIcon2
"$client.JButton.buttonType": "roundRect"
"buttonType": enum com.formdev.flatlaf.extras.components.FlatButton$ButtonType roundRect
} )
add( new FormComponent( "javax.swing.JToggleButton" ) {
add( new FormComponent( "com.formdev.flatlaf.extras.components.FlatToggleButton" ) {
name: "toggleButton25"
"icon": #SwingIcon4
"selected": true
"$client.JButton.buttonType": "roundRect"
"buttonType": enum com.formdev.flatlaf.extras.components.FlatButton$ButtonType roundRect
} )
add( new FormComponent( "javax.swing.JToggleButton" ) {
add( new FormComponent( "com.formdev.flatlaf.extras.components.FlatToggleButton" ) {
name: "toggleButton26"
"icon": #SwingIcon5
"selected": true
"$client.JButton.buttonType": "roundRect"
"buttonType": enum com.formdev.flatlaf.extras.components.FlatButton$ButtonType roundRect
} )
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
"value": "cell 1 23 5 1"

View File

@@ -0,0 +1,113 @@
/*
* Copyright 2020 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.testing;
import java.awt.Component;
import java.util.Objects;
import javax.swing.AbstractListModel;
import javax.swing.ComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.JList;
import javax.swing.plaf.basic.BasicComboBoxRenderer;
/**
* @author Karl Tauber
*/
public class FlatTestEnumComboBox<E>
extends JComboBox<E>
{
@SuppressWarnings( "unchecked" )
public void init( Class<E> enumType, boolean supportDefault ) {
setRenderer( new EnumComboBoxRenderer() );
setModel( new EnumComboBoxModel<>( enumType, supportDefault ) );
}
@SuppressWarnings( "unchecked" )
public E getSelectedValue() {
return (E) getSelectedItem();
}
@Override
public int getSelectedIndex() {
if( getSelectedItem() == null && getItemCount() > 0 && getItemAt( 0 ) == null )
return 0;
return super.getSelectedIndex();
}
//---- class EnumComboBoxRenderer -----------------------------------------
public static class EnumComboBoxRenderer
extends BasicComboBoxRenderer
{
@SuppressWarnings( "rawtypes" )
@Override
public Component getListCellRendererComponent( JList list, Object value, int index, boolean isSelected, boolean cellHasFocus ) {
setEnabled( value != null || isSelected );
if( value == null )
value = "(default)";
return super.getListCellRendererComponent( list, value, index, isSelected, cellHasFocus );
}
}
//---- class EnumComboBoxModel --------------------------------------------
public static class EnumComboBoxModel<E>
extends AbstractListModel<E>
implements ComboBoxModel<E>
{
private final boolean supportDefault;
private final E[] values;
private Object selectedItem;
public EnumComboBoxModel( Class<E> enumType, boolean supportDefault ) {
this.supportDefault = supportDefault;
values = enumType.getEnumConstants();
if( !supportDefault )
selectedItem = values[0];
}
@Override
public int getSize() {
return values.length + (supportDefault ? 1 : 0);
}
@Override
public E getElementAt( int index ) {
if( supportDefault ) {
if( index == 0 )
return null;
index--;
}
return values[index];
}
@Override
public Object getSelectedItem() {
return selectedItem;
}
@Override
public void setSelectedItem( Object anItem ) {
if( !Objects.equals( selectedItem, anItem ) ) {
selectedItem = anItem;
fireContentsChanged( this, -1, -1 );
}
}
}
}