java 按钮 颜色_java – 单击按钮时如何显示颜色选择器?

这是一个颜色选择按钮类:

>显示当前选定的颜色

>按下时打开JColorChooser对话框

>选择颜色时触发事件

以这种方式使用它:

ColorChooserButton colorChooser = new ColorChooserButton(Color.WHITE);

colorChooser.addColorChangedListener(new ColorChangedListener() {

@Override

public void colorChanged(Color newColor) {

// do something with newColor ...

}

});

deLcY.png

import java.awt.Color;

import java.awt.Graphics2D;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.image.BufferedImage;

import java.util.ArrayList;

import java.util.List;

import javax.swing.ImageIcon;

import javax.swing.JButton;

import javax.swing.JColorChooser;

public class ColorChooserButton extends JButton {

private Color current;

public ColorChooserButton(Color c) {

setSelectedColor(c);

addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent arg0) {

Color newColor = JColorChooser.showDialog(null, "Choose a color", current);

setSelectedColor(newColor);

}

});

}

public Color getSelectedColor() {

return current;

}

public void setSelectedColor(Color newColor) {

setSelectedColor(newColor, true);

}

public void setSelectedColor(Color newColor, boolean notify) {

if (newColor == null) return;

current = newColor;

setIcon(createIcon(current, 16, 16));

repaint();

if (notify) {

// Notify everybody that may be interested.

for (ColorChangedListener l : listeners) {

l.colorChanged(newColor);

}

}

}

public static interface ColorChangedListener {

public void colorChanged(Color newColor);

}

private List listeners = new ArrayList();

public void addColorChangedListener(ColorChangedListener toAdd) {

listeners.add(toAdd);

}

public static ImageIcon createIcon(Color main, int width, int height) {

BufferedImage image = new BufferedImage(width, height, java.awt.image.BufferedImage.TYPE_INT_RGB);

Graphics2D graphics = image.createGraphics();

graphics.setColor(main);

graphics.fillRect(0, 0, width, height);

graphics.setXORMode(Color.DARK_GRAY);

graphics.drawRect(0, 0, width-1, height-1);

image.flush();

ImageIcon icon = new ImageIcon(image);

return icon;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值