Java 带按钮的透明度控制

Java 带按钮的透明度控制,java,user-interface,processing,Java,User Interface,Processing,我试图创建一个显示原色的草图,然后用按钮或滑块控制其透明度。我正在使用CntrolP5库。问题是,每当我将透明度变量放入color()时,一切都会变得一团糟,甚至颜色都不会出现 见代码: import controlP5.*; ControlP5 cp5; int transparency; color c = color(0, 160, 25); color red; color green; color blue; void setup() { size(400, 600)

我试图创建一个显示原色的草图,然后用按钮或滑块控制其透明度。我正在使用CntrolP5库。问题是,每当我将透明度变量放入color()时,一切都会变得一团糟,甚至颜色都不会出现

见代码:

 import controlP5.*;

ControlP5 cp5;

int transparency;
color c = color(0, 160, 25);
color red;
color green;
color blue;


void setup() {
    size(400, 600);
    gui();

    red = color(255, 0, 0, transparency); // WHWENEVER I PUT TRASNPARENCY VALUE DOES NOT WORK
    green = color(0, 255, 0, transparency);
    blue = color(0, 0, 255, transparency);
    noStroke();
    smooth();

  }
  // create gui
void gui() {

  cp5 = new ControlP5(this);

  // create radio button


  cp5.addRadioButton("radio")
    .setPosition(40, 200)
    .setItemWidth(20)
    .setItemHeight(20)
    .addItem("red", 0)
    .addItem("green", 1)
    .addItem("blue", 2)
    .setColorLabel(color(255))
    .activate(2)

  ;

  cp5.addRadioButton("level")
    .setPosition(100, 200)
    .setItemWidth(20)
    .setItemHeight(20)
    .addItem("ONE", 0)
    .addItem("TWO", 1)
    .addItem("THREE", 2)
    .addItem("FOUR", 3)
    .addItem("FIVE", 4)
    .addItem("SIX", 5)
    .addItem("SEVEN", 6)
    .addItem("EIGHT", 7)
    .addItem("NINE", 8)
    .addItem("TEN", 9)
    .setColorLabel(color(255))
    .activate(2)

  ;

  //add slider bar


  /* cp5.addSlider("level")
    .setPosition(60,20)
    .setSize(100,20)
    .setRange(0,10)
    .setValue(5)
    .setNumberOfTickMarks(11)
    .setSliderMode(Slider.FLEXIBLE)
    ;*/

}


void radio(int theC) {
  switch (theC) {
    case (0):
      c = red;
      break;
    case (1):
      c = green;
      break;
    case (2):
      c = blue;
      break;

  }
}

void level(int theC) {
  switch (theC) {
    case (0):
      transparency = 15;
      break;
    case (1):
      transparency = 13;
      break;
    case (2):
      transparency = 11;
      break;
    case (3):
      transparency = 9;
      break;
    case (4):
      transparency = 7;
      break;
    case (5):
      transparency = 6;
      break;
    case (6):
      transparency = 5;
      break;
    case (7):
      transparency = 4;
      break;
    case (8):
      transparency = 2;
      break;
    case (9):
      transparency = 1;
      break;

  }
}

void draw() {
  background(220);

  fill(c); //fill with color

  ellipse(200, 400, 100, 100);

}

首先,您的代码不完整。例如,很难看到何时调用
setup()
。如果只是在开始时(如设置),则
transparency
变量的值可能为0(因为它未初始化),并且颜色将完全透明

其次,alpha值应该是介于0.0和1.0之间的浮点或介于0和255之间的整数。在您的例子中,您将透明度值设置得非常低(最高值为15),因此您的颜色将非常透明。请尝试使用此选项:

void level(int theC) {
  switch (theC) {
    case (0):
      transparency = 255;
      break;
    case (1):
      transparency = 230;
      break;
    case (2):
      transparency = 200;
      break;
    case (3):
      transparency = 170;
      break;
    case (4):
      transparency = 140;
      break;
    case (5):
      transparency = 110;
      break;
    case (6):
      transparency = 80;
      break;
    case (7):
      transparency = 50;
      break;
    case (8):
      transparency = 20;
      break;
    case (9):
      transparency = 0;
      break;

  }
}

我希望它能有所帮助。

您在
setup()
中为颜色(红色、绿色、蓝色)初始化了变量,并且从不更改它们。如果要更改透明度,需要移入
draw()
,并且变量
transparency
需要初始化为某个值

此外,只有当用户单击“单选”按钮时,才可以更改颜色。为了改进这一点,您需要将颜色逻辑从`radio()中抽象出来

其中,
mode
是存储颜色模式的整数变量。并更新了
draw()
函数:

void draw() {
  background(220);

  switch (mode) {
    case (0):
      c = color(255, 0, 0, transparency);
      break;
    case (1):
      c = color(0, 255, 0, transparency);
      break;
    case (2):
      c = color(0, 0, 255, transparency);
      break;    
  }

  fill(c); //fill with color
  ellipse(200, 400, 100, 100);
}
正如@rlinden正确提到的,您还应该将alpha值更新为0-255

void draw() {
  background(220);

  switch (mode) {
    case (0):
      c = color(255, 0, 0, transparency);
      break;
    case (1):
      c = color(0, 255, 0, transparency);
      break;
    case (2):
      c = color(0, 0, 255, transparency);
      break;    
  }

  fill(c); //fill with color
  ellipse(200, 400, 100, 100);
}