Как создать более одного окна одного скетча в Processing?

Я хочу создать два окна, используя только один эскиз в Обработке.

Что я пытаюсь сделать, так это то, что если я нажму кнопку в одном окне, то какое-то изображение появится в другом окне.

Я искал Google и нашел несколько примеров. На самом деле, я нашел тот же вопрос в этой «сети переполнения стека». Вот ссылки.

Создайте более одного окна одного эскиза в Обработка http://forum.processing.org/one/topic/multiple-windows-2-4-2011.html

Вот коды вторых ссылок.

import java.awt.Frame;
PFrame f;
secondApplet s;
//f = new PFrame();
void setup() {
 size(320, 240);
 f = new PFrame();
}

void draw() {
  background(255,0,0);
   fill(255);
   rect(10,10,frameCount%0,10);
   s.background(0, 0, 255);
   s.fill(100);
   s.rect(10,20,frameCount%0,10);
   s.redraw();
}

public class PFrame extends Frame{
    public PFrame() {
        setBounds(100,100,400,300);
        s = new secondApplet();
        add(s);
        s.init();
        show();
    }
}

public class secondApplet extends PApplet {
    public void setup() {
        size(400, 300);
        noLoop();
    }

    public void draw() {
    }
} 

Но когда я запускаю эти коды, я получаю следующее сообщение об ошибке в add(s);.

Метод add(Component) в типе Container неприменим для аргументов (multi_window_test.secondApplet)

Код первого комментария первой ссылки аналогичен, но когда я запускаю этот код, я получаю то же сообщение об ошибке.

Другие коды примеров, которые я нашел, похожи. Все они создают класс PFrame и второй апплет, который расширяет PApplet. Они сказали, что эти коды работают хорошо, но я не могу запустить эти коды.

Я не мог найти причину моего сообщения об ошибке. У других людей, кроме меня, похоже, нет проблем с запуском этого примера кода. Если кто-то знает решение, пожалуйста, помогите мне.

Также, если есть другой простой способ создания мультиокон в одном скетче, сообщите, пожалуйста.


person Jinha.Kim    schedule 26.09.2015    source источник
comment
возможный дубликат Новое окно в обработке   -  person Kevin Workman    schedule 26.09.2015


Ответы (1)


Причина сообщения об ошибке довольно проста: функция add() ожидает Component, а PApplet не является Component. Это связано с тем, что PApplet больше не расширяет Applet с обработки 3, поэтому старый код, использующий его как Component, больше не будет работать.

Вместо этого рассмотрите мой ответ на этот вопрос. По сути, просто создайте класс, который расширяет PApplet для вашего второго окна, а затем вызовите PApplet.runSketch(), используя этот второй PApplet в качестве параметра:

void setup() {
  size(100, 100);

  String[] args = {"TwoFrameTest"};
  SecondApplet sa = new SecondApplet();
  PApplet.runSketch(args, sa);
}

void draw() {
  background(0);
  ellipse(50, 50, 10, 10);
}     

public class SecondApplet extends PApplet {

  public void settings() {
    size(200, 100);
  }
  public void draw() {
    background(255);
    fill(0);
    ellipse(100, 50, 10, 10);
  }
}
person Kevin Workman    schedule 26.09.2015
comment
Могу я задать еще один вопрос? На самом деле у меня два монитора, и я хочу показывать по два окна на каждом мониторе. Я хочу показать второе окно на втором мониторе в полноэкранном режиме. Не могли бы вы сообщить мне, как я могу это сделать? - person Jinha.Kim; 26.09.2015
comment
@ Jinha.Kim Это немного сложнее, но в основном вам нужно использовать класс GraphicsEnvironment Java. Google — ваш друг, и я говорил об этом здесь. Попробуйте что-нибудь, и если вы застряли, я предлагаю опубликовать еще один отдельный вопрос. - person Kevin Workman; 26.09.2015
comment
Я только что нашел решение. В Processing 3.0 есть простая команда. Если я напишу fullScreen(2) вместо size(400,400), то окно будет отображаться как fullScreen на втором мониторе. Ссылка здесь. processing.org/reference/fullScreen_.html - person Jinha.Kim; 30.09.2015
comment
Кроме того, я хочу закрыть второе окно, если я нажму кнопку мыши в первом окне. Теперь я могу открыть два окна благодаря вашей помощи, но я также закрываю второе окно, когда захочу. Не могли бы вы сообщить мне, как я могу это сделать? - person Jinha.Kim; 30.09.2015
comment
@Jinha.Kim Опубликуйте то, что вы пробовали (в виде примера MCVE, как я разместил в своем ответе) в новом вопрос, и мы пойдем оттуда. - person Kevin Workman; 30.09.2015