java颜色选择器_在Java中更改颜色选择器按钮的背景色

小编典典

知道从上下文,你意思是这样(代码示例),或setBackground为JColorChooser的还是其JComponents在JColorChooser

import java.awt.BorderLayout;

import java.awt.Color;

import java.awt.Component;

import java.awt.Dimension;

import java.awt.EventQueue;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.ComboBoxEditor;

import javax.swing.DefaultListCellRenderer;

import javax.swing.JButton;

import javax.swing.JColorChooser;

import javax.swing.JComboBox;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JList;

import javax.swing.ListCellRenderer;

import javax.swing.border.LineBorder;

import javax.swing.event.EventListenerList;

class ColorComboBoxEditor implements ComboBoxEditor {

final protected JButton editor;

private EventListenerList listenerList = new EventListenerList();

ColorComboBoxEditor(Color initialColor) {

editor = new JButton("");

editor.setBackground(initialColor);

ActionListener actionListener = new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

Color currentBackground = editor.getBackground();

Color color = JColorChooser.showDialog(editor, "Color Chooser", currentBackground);

if ((color != null) && (currentBackground != color)) {

editor.setBackground(color);

fireActionEvent(color);

}

}

};

editor.addActionListener(actionListener);

}

@Override

public void addActionListener(ActionListener l) {

listenerList.add(ActionListener.class, l);

}

@Override

public Component getEditorComponent() {

return editor;

}

@Override

public Object getItem() {

return editor.getBackground();

}

@Override

public void removeActionListener(ActionListener l) {

listenerList.remove(ActionListener.class, l);

}

@Override

public void selectAll() {

}

@Override

public void setItem(Object newValue) {

if (newValue instanceof Color) {

Color color = (Color) newValue;

editor.setBackground(color);

} else {

try {

Color color = Color.decode(newValue.toString());

editor.setBackground(color);

} catch (NumberFormatException e) {

}

}

}

protected void fireActionEvent(Color color) {

Object listeners[] = listenerList.getListenerList();

for (int i = listeners.length - 2; i >= 0; i -= 2) {

if (listeners[i] == ActionListener.class) {

ActionEvent actionEvent = new ActionEvent(editor, ActionEvent.ACTION_PERFORMED, color.toString());

((ActionListener) listeners[i + 1]).actionPerformed(actionEvent);

}

}

}

}

class ColorCellRenderer implements ListCellRenderer {

private DefaultListCellRenderer defaultRenderer = new DefaultListCellRenderer();

private final static Dimension preferredSize = new Dimension(0, 20);

@Override

public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {

JLabel renderer = (JLabel) defaultRenderer.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);

if (value instanceof Color) {

renderer.setBackground((Color) value);

}

if (cellHasFocus || isSelected) {

renderer.setBorder(new LineBorder(Color.DARK_GRAY));

} else {

renderer.setBorder(null);

}

renderer.setPreferredSize(preferredSize);

return renderer;

}

}

class ColorComboBoxEditorRendererDemo {

public ColorComboBoxEditorRendererDemo() {

Color colors[] = {Color.BLACK, Color.BLUE, Color.GREEN, Color.RED, Color.WHITE, Color.YELLOW};

JFrame frame = new JFrame("Color JComboBox");

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

final JComboBox comboBox = new JComboBox(colors);

comboBox.setEditable(true);

comboBox.setRenderer(new ColorCellRenderer());

Color color = (Color) comboBox.getSelectedItem();

ComboBoxEditor editor = new ColorComboBoxEditor(color);

comboBox.setEditor(editor);

frame.add(comboBox, BorderLayout.NORTH);

final JLabel label = new JLabel();

label.setOpaque(true);

label.setBackground((Color) comboBox.getSelectedItem());

frame.add(label, BorderLayout.CENTER);

ActionListener actionListener = new ActionListener() {

@Override

public void actionPerformed(ActionEvent actionEvent) {

Color selectedColor = (Color) comboBox.getSelectedItem();

label.setBackground(selectedColor);

}

};

comboBox.addActionListener(actionListener);

frame.setSize(300, 200);

frame.setVisible(true);

}

public static void main(String args[]) {

EventQueue.invokeLater(new Runnable() {

@Override

public void run() {

ColorComboBoxEditorRendererDemo colorComboBoxEditorRendererDemo = new ColorComboBoxEditorRendererDemo();

}

});

}

}

2020-10-17

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值