【发布时间】:2020-02-29 02:55:25
【问题描述】:
我正在尝试在草图中使用 JColorChooser:
import javax.swing.JColorChooser;
import java.awt.Color;
import javax.swing.JFrame;
color bgcolor = color(0,100,200,150);
void setup() {
size(200, 200);
noLoop();
}
void draw() {
background(0);
fill(bgcolor);
rect(0,0,width,height);
}
void keyPressed() {
bgcolor = pickColor(bgcolor);
redraw();
}
color pickColor(int c) {
Color javaColor = new Color(c, true);
javaColor = JColorChooser.showDialog(this, "Java Color Chooser", javaColor);
if (javaColor != null ) {
c = (int)alpha(c) << 24 | (javaColor.getRed() << 16 ) | (javaColor.getGreen() << 8 ) | (javaColor.getBlue() << 0 );
println( "Picked:" + hex(c) );
return c;
}
return color(0);
}
但处理显示错误:
函数“showDialog()”需要如下参数:“showDialog(Component, String, Color)”
我也尝试使用JColorChooser.showDialog( null,"Java Color Chooser",javaColor); 和使用/不使用noLoop()/loop(),但没有显示对话框。
我该如何解决?
有没有办法在处理中显示 JDialog 和/或 JFrame?
【问题讨论】:
-
JColorChooser.showDialog(null, "Java Color Chooser", javaColor);工作得很好。我只是将您的代码复制粘贴到处理中,将...替换为void setup() { noLoop(); colorPick(color(255,0,0)); },更新了showDialog 行,它运行时没有任何抱怨。请记住,Processing 基于但不遵循与 Java 相同的范围规则,因此在实际类方法之外没有您应该依赖的this。 -
@Mike'Pomax'Kamermans:您使用的是哪个版本的处理和操作系统?
-
来自processing.org/download 的当前处理。操作系统几乎无关紧要:处理与捆绑的 JVM 一起提供,因此执行完全基于该 JVM,而不是主机操作系统。
-
我已将您的代码更新为 minimal reproducible example,并进行了两项调整:我已将
colorPick重命名为pickColor(标准约定:在方法之后命名),并且我已经修复了您构建c的方式,因为new Color(c)完全失去了alpha 通道,因此您必须保留原始颜色int 的alpha(...)。如果您将代码中的this更改为null,正如您提到的已经尝试过的那样,该代码在当前处理中运行得非常好。
标签: java swing processing