Substance client properties

View all API methods.

View all client properties.


Client property name

SubstanceLookAndFeel.COMBO_POPUP_PROTOTYPE

Description

Property name for specifying the combobox popup prototype display value which is used to compute the width of the popup at runtime. The property value should be one of:

  • ComboPopupPrototypeCallback - will provide application-specific logic at runtime.
  • Object - will point to the prototype entry itself.

This property can be set either on a specific JComboBox or globally on UIManager.


See also


Sample code

import java.awt.FlowLayout;
import java.awt.GridLayout;

import javax.swing.*;

import org.pushingpixels.substance.api.SubstanceLookAndFeel;
import org.pushingpixels.substance.api.combo.ComboPopupPrototypeCallback;
import org.pushingpixels.substance.api.combo.WidestComboPopupPrototype;
import org.pushingpixels.substance.api.skin.BusinessBlackSteelSkin;

/**
 * Test application that shows the use of the
 {@link SubstanceLookAndFeel#COMBO_POPUP_PROTOTYPE} client property.
 
 @author Kirill Grouchnikov
 @see SubstanceLookAndFeel#COMBO_POPUP_PROTOTYPE
 */
public class ComboPopupPrototype extends JFrame {
  /**
   * Creates the main frame for <code>this</code> sample.
   */
  public ComboPopupPrototype() {
    super("Combo popup prototype");

    this.setLayout(new GridLayout(13));

    JPanel panel1 = new JPanel(new FlowLayout());
    JComboBox comboProto1 = new JComboBox(new Object[] { "aa""aaaaa",
        "aaaaaaaaaa""this one is the one",
        "abcdefghijklmnopqrstuvwxyz" });
    comboProto1.setPrototypeDisplayValue("aaaaa");
    // set popup prototype as hard-code value in the model
    comboProto1.putClientProperty(
        SubstanceLookAndFeel.COMBO_POPUP_PROTOTYPE,
        "this one is the one");
    panel1.add(new JLabel("Hard-coded value"));
    panel1.add(comboProto1);
    this.add(panel1);

    JPanel panel2 = new JPanel(new FlowLayout());
    JComboBox comboProto2 = new JComboBox(new Object[] { "aa""aaaaa",
        "aaaaaaaaaa""another one (not it)",
        "abcdefghijklmnopqrstuvwxyz" });
    comboProto2.setPrototypeDisplayValue("aaaaa");
    // set popup prototype as widest value (core implementation of
    // ComboPopupPrototypeCallback interface)
    comboProto2.putClientProperty(
        SubstanceLookAndFeel.COMBO_POPUP_PROTOTYPE,
        new WidestComboPopupPrototype());
    panel2.add(new JLabel("Widest core callback"));
    panel2.add(comboProto2);
    this.add(panel2);

    JPanel panel3 = new JPanel(new FlowLayout());
    JComboBox comboProto3 = new JComboBox(new Object[] { "aa""aaaaa",
        "this is not""this one is not it",
        "this one is it that is for the popup" });
    comboProto3.setPrototypeDisplayValue("aaaaa");
    // set popup prototype as custom implementation of
    // ComboPopupPrototypeCallback interface
    comboProto3.putClientProperty(
        SubstanceLookAndFeel.COMBO_POPUP_PROTOTYPE,
        new ComboPopupPrototypeCallback() {
          public Object getPopupPrototypeDisplayValue(JComboBox jc) {
            return jc.getModel().getElementAt(
                jc.getModel().getSize() 1);
          }
        });
    panel3.add(new JLabel("Custom callback"));
    panel3.add(comboProto3);
    this.add(panel3);

    this.setSize(400200);
    this.setLocationRelativeTo(null);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  }

  /**
   * The main method for <code>this</code> sample. The arguments are ignored.
   
   @param args
   *            Ignored.
   */
  public static void main(String[] args) {
    JFrame.setDefaultLookAndFeelDecorated(true);
    SwingUtilities.invokeLater(new Runnable() {
      public void run() {
        SubstanceLookAndFeel.setSkin(new BusinessBlackSteelSkin());
        new ComboPopupPrototype().setVisible(true);
      }
    });
  }
}

The screenshot below shows popup prototype set to a model entry:

The screenshot below shows popup prototype set to the widest entry (core WidestComboPopupPrototype implementation of the ComboPopupPrototypeCallback interface):

The screenshot below shows popup prototype set to the widest entry (custom implementation of ComboPopupPrototypeCallback interface):