下面列出了怎么用javax.swing.plaf.basic.BasicComboBoxUI的API类实例代码及写法,或者点击链接到github查看源代码。
public MaterialComboBox() {
setModel(new DefaultComboBoxModel<T>());
setRenderer(new FieldRenderer<T>(this));
setUI(new BasicComboBoxUI() {
@Override
protected ComboPopup createPopup() {
BasicComboPopup popup = new Popup(comboBox);
popup.getAccessibleContext().setAccessibleParent(comboBox);
return popup;
}
@Override
protected JButton createArrowButton() {
JButton button = new javax.swing.plaf.basic.BasicArrowButton(
javax.swing.plaf.basic.BasicArrowButton.SOUTH,
MaterialColor.TRANSPARENT,
MaterialColor.TRANSPARENT,
MaterialColor.TRANSPARENT,
MaterialColor.TRANSPARENT);
button.setName("ComboBox.arrowButton");
return button;
}
});
setOpaque(false);
setBackground(MaterialColor.TRANSPARENT);
}
@Override
protected LayoutManager createLayoutManager() {
return new BasicComboBoxUI.ComboBoxLayoutManager() {
@Override
public void layoutContainer( Container parent ) {
super.layoutContainer( parent );
if ( editor != null && padding != null ) {
// fix editor bounds by subtracting padding
editor.setBounds( FlatUIUtils.subtractInsets( editor.getBounds(), padding ) );
}
}
};
}
@Override
protected PropertyChangeListener createPropertyChangeListener() {
return new BasicComboBoxUI.PropertyChangeHandler() {
@Override
public void propertyChange( PropertyChangeEvent e ) {
super.propertyChange( e );
Object source = e.getSource();
String propertyName = e.getPropertyName();
if( editor != null &&
((source == comboBox && propertyName == "foreground") ||
(source == editor && propertyName == "enabled")) )
{
// fix editor component colors
updateEditorColors();
} else if( editor != null && source == comboBox && propertyName == "componentOrientation" ) {
ComponentOrientation o = (ComponentOrientation) e.getNewValue();
editor.applyComponentOrientation( o );
} else if( editor != null && FlatClientProperties.PLACEHOLDER_TEXT.equals( propertyName ) )
editor.repaint();
else if( FlatClientProperties.COMPONENT_ROUND_RECT.equals( propertyName ) )
comboBox.repaint();
else if( FlatClientProperties.MINIMUM_WIDTH.equals( propertyName ) )
comboBox.revalidate();
}
};
}
private static <E> JComboBox<E> makeComboBox(ComboBoxModel<E> model) {
return new JComboBox<E>(model) {
@Override public void updateUI() {
super.updateUI();
setBorder(BorderFactory.createEmptyBorder());
setUI(new BasicComboBoxUI() {
@Override protected JButton createArrowButton() {
JButton button = super.createArrowButton();
button.setContentAreaFilled(false);
button.setBorder(BorderFactory.createEmptyBorder());
return button;
}
});
// JTextField editor = (JTextField) getEditor().getEditorComponent();
// editor.setBorder(BorderFactory.createEmptyBorder());
// editor.setOpaque(true);
// editor.setEditable(false);
}
};
// combo.setBorder(BorderFactory.createEmptyBorder());
// ((JTextField) combo.getEditor().getEditorComponent()).setBorder(null);
// ((JTextField) combo.getEditor().getEditorComponent()).setMargin(null);
// combo.setBackground(Color.WHITE);
// combo.setOpaque(true);
// combo.setEditable(true);
// return combo;
}
private static Component makePanel() {
JPanel p = new JPanel(new BorderLayout(5, 5));
p.add(new JComboBox<>(new String[] {"1111", "2222222", "3333333"}));
String[] items = {"JComboBox 11111:", "JComboBox 222:", "JComboBox 33:"};
JComboBox<String> comboBox = new JComboBox<String>(items) {
@Override public void updateUI() {
super.updateUI();
UIManager.put("ComboBox.squareButton", Boolean.FALSE);
UIManager.put("ComboBox.background", p.getBackground());
setUI(new BasicComboBoxUI() {
@Override protected JButton createArrowButton() {
JButton button = new JButton(); // .createArrowButton();
button.setBorder(BorderFactory.createEmptyBorder());
button.setVisible(false);
return button;
}
});
ListCellRenderer<? super String> r = getRenderer();
setRenderer((list, value, index, isSelected, cellHasFocus) -> {
JLabel c = (JLabel) r.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
c.setHorizontalAlignment(SwingConstants.RIGHT);
if (isSelected) {
c.setForeground(list.getSelectionForeground());
c.setBackground(list.getSelectionBackground());
} else {
c.setForeground(list.getForeground());
c.setBackground(list.getBackground());
}
return c;
});
setBorder(BorderFactory.createEmptyBorder(0, 2, 0, 2));
setOpaque(false);
setFocusable(false);
}
};
p.add(comboBox, BorderLayout.WEST);
p.setBorder(BorderFactory.createTitledBorder("JComboBox + JComboBox"));
return p;
}
private static <E> JComboBox<E> makeComboBox(ComboBoxModel<E> model) {
return new JComboBox<E>(model) {
@Override public void updateUI() {
super.updateUI();
setBorder(BorderFactory.createEmptyBorder());
setUI(new BasicComboBoxUI() {
@Override protected JButton createArrowButton() {
JButton button = super.createArrowButton();
button.setContentAreaFilled(false);
button.setBorder(BorderFactory.createEmptyBorder());
return button;
}
});
// JTextField editor = (JTextField) getEditor().getEditorComponent();
// editor.setBorder(BorderFactory.createEmptyBorder());
// editor.setOpaque(true);
// editor.setEditable(false);
}
};
// combo.setBorder(BorderFactory.createEmptyBorder());
// ((JTextField) combo.getEditor().getEditorComponent()).setBorder(null);
// ((JTextField) combo.getEditor().getEditorComponent()).setMargin(null);
// combo.setBackground(Color.WHITE);
// combo.setOpaque(true);
// combo.setEditable(true);
// return combo;
}
private MainPanel() {
super(new BorderLayout());
// Toolkit.getDefaultToolkit().addAWTEventListener(new AWTEventListener() {
// @Override public void eventDispatched(AWTEvent event) {
// if (event instanceof MouseWheelEvent) {
// Object source = event.getSource();
// if (source instanceof JScrollPane) {
// System.out.println("JScrollPane");
// return;
// }
// ((MouseWheelEvent) event).consume();
// }
// }
// }, AWTEvent.MOUSE_WHEEL_EVENT_MASK);
JComboBox<String> combo1 = makeComboBox(5);
if (combo1.getUI() instanceof WindowsComboBoxUI) {
combo1.setUI(new WindowsComboBoxUI() {
@Override protected ComboPopup createPopup() {
return new BasicComboPopup2(comboBox);
}
});
} else {
combo1.setUI(new BasicComboBoxUI() {
@Override protected ComboPopup createPopup() {
return new BasicComboPopup2(comboBox);
}
});
}
JComboBox<String> combo2 = makeComboBox(20);
if (combo2.getUI() instanceof WindowsComboBoxUI) {
combo2.setUI(new WindowsComboBoxUI() {
@Override protected ComboPopup createPopup() {
return new BasicComboPopup3(comboBox);
}
});
} else {
combo2.setUI(new BasicComboBoxUI() {
@Override protected ComboPopup createPopup() {
return new BasicComboPopup3(comboBox);
}
});
}
Box box = Box.createVerticalBox();
box.add(makeTitledPanel("default:", makeComboBox(5)));
box.add(Box.createVerticalStrut(5));
box.add(makeTitledPanel("default:", makeComboBox(20)));
box.add(Box.createVerticalStrut(5));
box.add(makeTitledPanel("disable right click in drop-down list:", combo1));
box.add(Box.createVerticalStrut(5));
box.add(makeTitledPanel("disable right click and scroll in drop-down list:", combo2));
box.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
add(box, BorderLayout.NORTH);
setPreferredSize(new Dimension(320, 240));
}
private MainPanel() {
super(new BorderLayout(15, 15));
UIManager.put("ScrollBar.width", 10);
UIManager.put("ScrollBar.thumbHeight", 20); // GTKLookAndFeel, SynthLookAndFeel, NimbusLookAndFeel
UIManager.put("ScrollBar.minimumThumbSize", new Dimension(30, 30));
UIManager.put("ScrollBar.incrementButtonGap", 0);
UIManager.put("ScrollBar.decrementButtonGap", 0);
UIManager.put("ScrollBar.thumb", THUMB);
UIManager.put("ScrollBar.track", BACKGROUND);
UIManager.put("ComboBox.foreground", FOREGROUND);
UIManager.put("ComboBox.background", BACKGROUND);
UIManager.put("ComboBox.selectionForeground", SELECTION_FOREGROUND);
UIManager.put("ComboBox.selectionBackground", BACKGROUND);
UIManager.put("ComboBox.buttonDarkShadow", BACKGROUND);
UIManager.put("ComboBox.buttonBackground", FOREGROUND);
UIManager.put("ComboBox.buttonHighlight", FOREGROUND);
UIManager.put("ComboBox.buttonShadow", FOREGROUND);
JComboBox<String> combo = new JComboBox<String>(makeModel()) {
private transient MouseListener handler;
private transient PopupMenuListener listener;
@Override public void updateUI() {
removeMouseListener(handler);
removePopupMenuListener(listener);
UIManager.put(KEY, new TopRoundedCornerBorder());
super.updateUI();
setUI(new BasicComboBoxUI() {
@Override protected JButton createArrowButton() {
JButton b = new JButton(new ArrowIcon(BACKGROUND, FOREGROUND));
b.setContentAreaFilled(false);
b.setFocusPainted(false);
b.setBorder(BorderFactory.createEmptyBorder());
return b;
}
@Override protected ComboPopup createPopup() {
return new BasicComboPopup(comboBox) {
@Override protected JScrollPane createScroller() {
JScrollPane sp = new JScrollPane(list) {
@Override public void updateUI() {
super.updateUI();
getVerticalScrollBar().setUI(new WithoutArrowButtonScrollBarUI());
getHorizontalScrollBar().setUI(new WithoutArrowButtonScrollBarUI());
}
};
sp.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);
sp.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
sp.setHorizontalScrollBar(null);
return sp;
}
};
}
});
handler = new ComboRolloverHandler();
addMouseListener(handler);
listener = new HeavyWeightContainerListener();
addPopupMenuListener(listener);
Object o = getAccessibleContext().getAccessibleChild(0);
if (o instanceof JComponent) {
JComponent c = (JComponent) o;
c.setBorder(new BottomRoundedCornerBorder());
c.setForeground(FOREGROUND);
c.setBackground(BACKGROUND);
}
}
};
JPanel p = new JPanel(new GridLayout(0, 1, 15, 15));
p.setOpaque(true);
p.add(combo);
JTree tree = new JTree();
int row = 0;
while (row < tree.getRowCount()) {
tree.expandRow(row);
row++;
}
JScrollPane scroll = new JScrollPane(tree) {
@Override public void updateUI() {
super.updateUI();
getVerticalScrollBar().setUI(new WithoutArrowButtonScrollBarUI());
getHorizontalScrollBar().setUI(new WithoutArrowButtonScrollBarUI());
}
};
scroll.setBackground(tree.getBackground());
scroll.setBorder(new RoundedCornerBorder());
setBorder(BorderFactory.createEmptyBorder(8, 8, 8, 8));
add(scroll);
add(p, BorderLayout.NORTH);
setOpaque(true);
setPreferredSize(new Dimension(320, 240));
}
public HackyComboBoxUI(ComboBoxUI ui, ComboBoxButtonImpl button) {
myButton = button;
myDelegateUI = (BasicComboBoxUI)ui;
}