我对Java比较陌生,但我做了一个简单的绘图程序,允许用户绘制,更改笔的颜色和大小,以及清除绘图区域。
用户从JColorChooser对象中选择一种颜色' c'并将其传递给颜色变量'选择'通过c.getColor()。我希望能够更改所选颜色的透明度,但我不知道是否有办法将颜色转换为RGB,以便我可以使用setColor(r,g,b,a)方法。我的代码如下。我真的很感激任何帮助!
Color selected;
public class ColorTool extends JPanel {
public ColorTool() {
super(new BorderLayout());
b = new JLabel("Pen Color", JLabel.CENTER);
b.setForeground(Color.black);
c = new JColorChooser(b.getForeground());
c.getSelectionModel().addChangeListener(new ColorListener());
add(c, BorderLayout.PAGE_END);
}
}
public DrawPanel() {
setDoubleBuffered(false);
addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
for (int i = 0; i <= 100; i++) {
if (PS == i) {
oldX = (int)(e.getX() - Math.ceil(PS/2));
oldY = (int)(e.getY() - Math.ceil(PS/2));
if (graphics != null) {
graphics.setColor(selected);
graphics.fillOval(oldX, oldY, PS, PS);
}
repaint();
oldX = e.getX();
oldY = e.getY();
}
}
}
});
addMouseMotionListener(new MouseMotionAdapter() {
public void mouseDragged(MouseEvent e) {
BasicStroke size = new BasicStroke(PS,
BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND);
currentX = e.getX();
currentY = e.getY();
if (graphics != null) {
graphics.setColor(selected);
graphics.setStroke(size);
graphics.drawLine(oldX, oldY, currentX, currentY);
}
repaint();
oldX = currentX;
oldY = currentY;
}
});
}
public class ColorListener implements ChangeListener {
public void stateChanged(ChangeEvent e) {
selected = c.getColor();
}
}
答案 0 :(得分:0)
您可以通过调用Color实例上的方法 getComponents 来访问它。
public float [] getComponents(float [] compArray)
返回一个float数组,其中包含Color的ColorSpace中Color的颜色和alpha分量。如果compArray为null,则为返回值创建一个长度等于关联ColorSpace中的组件数加1的数组。否则,compArray必须至少具有此长度,并使用组件填充并返回。
参数:compArray - 此方法在其ColorSpace中填充此Color的颜色和alpha分量并返回
的数组<强>返回强>: 浮点数组中的颜色和alpha分量。