Использование JColorChooser внутри обработки 3.5 - PullRequest
0 голосов
/ 27 февраля 2020

Я пытаюсь использовать 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 в обработке?

1 Ответ

0 голосов
/ 27 февраля 2020

Наконец-то создание фиктивного фрейма похоже работает, но я подожду других ответов:

...
int colorPick( int c ) {
  Color javaColor = new Color( c, true);
  noLoop();  
  JFrame jf = new JFrame( "Dummy" );
  jf.setDefaultCloseOperation( JFrame.HIDE_ON_CLOSE );
  jf.setLocationRelativeTo(null);
  jf.setAlwaysOnTop (true);
  jf.setVisible( true );
  javaColor  = JColorChooser.showDialog( jf,"Java Color Chooser",javaColor);
  jf.setVisible( false );
  loop();
  if (javaColor != null ) {  
    c = (javaColor.getAlpha() << 24 ) | (javaColor.getRed() << 16 ) | (javaColor.getGreen() << 8 ) | (javaColor.getBlue() << 0 );
    println( "Picked:" + hex(c) );
  }
  return c;
}
...
...