Swing Components in Default Processing Window_py5

Java Mode version sketch for Processing 3 & 4: :coffee:

/**
 * Processing Java Mode Swing Demo (v1.0.2)
 * GoToLoop (2024/Jun/03)
 *
 * https://Discourse.Processing.org/t/
 * swing-components-in-default-processing-window-py5/9
 */

import java.awt.Color;
import java.awt.Frame;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

import javax.swing.event.ChangeListener;
import javax.swing.event.ChangeEvent;

import javax.swing.JSlider;
import javax.swing.JLabel;
import javax.swing.JButton;
import javax.swing.JColorChooser;

import processing.awt.PSurfaceAWT.SmoothCanvas;

static final String TITLE = "Choose color:", DIAM = "Diameter: ";

Color fill = Color.GREEN;

JSlider slider;
JLabel label;

int cx, cy;

void settings() {
  size(600, 660);
  noLoop();
}

void setup() {
  fill(fill.getRGB());

  cx = width  >> 1;
  cy = height >> 1;

  slider = new JSlider(0, width - 60, cx);
  slider.setBounds(180, 20, 200, 24);
  slider.addChangeListener(slideChange);
  slider.setToolTipText("circle diameter");

  (label = new JLabel(DIAM + cx)).setBounds(75, 20, 80, 24);

  final JButton btn = new JButton("Color");
  btn.setBounds(400, 20, 80, 24);
  btn.addActionListener(btnAction);

  final PSurface window = getSurface();
  window.setTitle("Processing Java Mode Swing Demo");

  final SmoothCanvas canvas = (SmoothCanvas)window.getNative();
  canvas.setBounds(0, 60, width, height - 60);

  final Frame frame = canvas.getFrame();
  frame.add(slider);
  frame.add(label);
  frame.add(btn);

  slider.repaint();
  label.repaint();
  btn.repaint();
}

void draw() {
  background(0320);
  circle(cx, cy, slider.getValue());
}

void mouseWheel(final MouseEvent e) {
  slider.setValue(slider.getValue() - e.getCount() * 10);
}

final ChangeListener slideChange = new ChangeListener() {
  final void stateChanged(final ChangeEvent __) {
    label.setText(DIAM + slider.getValue());
    redraw();
  }
};

final ActionListener btnAction = new ActionListener() {
  final void actionPerformed(final ActionEvent __) {
    final Color chosenColor = JColorChooser.showDialog(null, TITLE, fill);
    if (chosenColor == null) return;

    fill((fill = chosenColor).getRGB());
    redraw();
  }
};

P.S.: The sketch can be refactored to be less verbose for Processing 4.

1 Like