我有一个JPanel,允许用户使用这些组件设置对象的颜色:
滑块(不透明度1-100)
按钮(使用上述元素的值预览颜色)
我问的是为什么按钮正确地获得颜色而不是不透明度 这是我的代码:
public Color getColor() {
if (tfRed.getText().equals("") || tfGreen.getText().equals("") || tfBlue.getText().equals("")) {
return new Color(0, 0, 0, 0);
} else {
if (tfRed.getText().matches("\\d+") && tfGreen.getText().matches("\\d+") && tfBlue.getText().matches("\\d+")
&& Integer.parseInt(tfRed.getText()) <= 255 && Integer.parseInt(tfGreen.getText()) <= 255 && Integer.parseInt(tfBlue.getText()) <= 255
&& Integer.parseInt(tfRed.getText()) >= 0 && Integer.parseInt(tfGreen.getText()) >= 0 && Integer.parseInt(tfBlue.getText()) >= 0) {
return new Color(
Float.parseFloat(tfRed.getText()) / 255,
Float.parseFloat(tfGreen.getText()) / 255,
Float.parseFloat(tfBlue.getText()) / 255,
Float.parseFloat(sOpacity.getValue() + "") / 100
);
} else {
JOptionPane.showMessageDialog(this, "Invalid rgb value");
tfRed.setText("0");
tfGreen.setText("0");
tfBlue.setText("0");
return new Color(0, 0, 0, 0);
}
}
}
我在所有文本字段的单个事件中设置了按钮的颜色,为滑块设置了另一个事件:
// on keyup
private void button_color(java.awt.event.KeyEvent evt) {
bColor.setBackground(getColor());
}
// on mousedragged and mouseclicked
private void slider_value(java.awt.event.MouseEvent evt) {
lOpacity.setText(sOpacity.getValue() + "");
bColor.setBackground(getColor());
}
我调试了它,我发现从getColor()
获取的颜色仅返回不透明度的rgb值,但是当我将getColor()
与其他自定义组件一起使用时(rgb + opacity)。
谢谢你的帮助
修改
找到解决方案:
// on mousedragged and mouseclicked
private void slider_value(java.awt.event.MouseEvent evt) {
lOpacity.setText(sOpacity.getValue() + "");
bColor.setBackground(getColor());
bColor.getParent().repaint(); <------
}
答案 0 :(得分:1)
我不认为设置按钮背景颜色是有用的,JButton背景颜色设置的外观和感觉,很难改变按钮的颜色,使用 JLabel 而不是