Обработка вызова PApplet во вложенных классах - PullRequest
0 голосов
/ 11 июня 2018

Я использую Processing 3 для создания графического интерфейса для сервоконтроллера вместо использования готовой библиотеки.Он основан на том, чтобы класс упаковки организовал несколько подклассов, которые используют для работы события мыши registerMethod (в отличие от более простого использования mousePressed () в основном эскизе).Я зацикливаюсь на именах / терминах PApplet для каждого класса, чтобы гарантировать, что они могут функционировать как внутри подкласса, так и сами по себе при вызове из основного.В моем примере пакет представляет собой всего лишь одну кнопку, а также прямой вызов кнопки для сравнения.Я знаю, что большинство современных пользователей Java считают использование Апплета устаревшим, но, поскольку я просто использую IDE обработки, я хотел бы лучше понять эту концепцию, а также избегать использования чего-то более сложного (но, возможно, менее запутанного)как интерфейс.

PackServ tryMe;
Butt bOne;

void setup() {
  size(200, 150);
  tryMe = new PackServ(this);
  bOne = new Butt(this);
}

void draw() {
  background (250);

  tryMe.Add(20, 10, 50);
  line(100,10,100,100);
    fill(130,255,170);
  rect(120,10,50,60,5);
  bOne.Add("B2", 145,35,25);
    stroke(20); textSize(14); fill(25);
  text("single", 130,100);
  text("package", 20,100);
}

public class PackServ extends PApplet {
  PApplet SerApp;
  Butt Butt1, Butt2;
  String theName;
  int pkX, pkY, pkW;

  PackServ(PApplet pa) {
   this.SerApp = pa;
    theName = "The Slider";
    pkX = 20; 
    pkY = 20; 
    pkW = 100;
  }

  void Add(int _x, int _y, int _w) {
    pkX = _x; pkY = _y; pkW = _w;  
    Butt1 = new Butt (this);
    drawIt();
  }
  void drawIt() {
    SerApp.fill(200); 
    SerApp.strokeWeight(1);
    SerApp.rect(pkX, pkY, pkW, 60, 5);
     Butt1.Add("B1", pkX+25, pkY+25, 25);
  }
} 

public class Butt
{
  PApplet butApp;
  int theX, theY, theW, theH, bRad;
  boolean pressed = false;
  color n;                             
  color h = color(240, 210, 10);         
  color f = color (40, 90, 190);          
  color a = color (240, 20, 20);           
  int oBb, li;
  String theLabel;

  Butt (PApplet butApplet) {
    this.butApp = butApplet;
    butApp.registerMethod("mouseEvent",this);
    n = f;
  }
  void Add(String _myName, int x, int y, int siz) {
    theLabel = _myName;
    theX = x;   
    theY = y; 
    bRad = siz;
    fill(75); 
    textSize(9);
    buttonLook();
  }
boolean overB(int mx, int my) {
    if (dist (mx, my, theX, theY) <= bRad) {
      return true;
    } else {
      return false;
    }
  }
  void buttonLook() {
    if (overB(mouseX, mouseY) && pressed) {
      n = a; 
      oBb = 3; li = 100;
    } else if (overB(mouseX, mouseY)) {
      text(theLabel, theX-10, theY+25);   
      n = h;
    } else {
      n = f; oBb=1; li=25;
    }
    strokeWeight(oBb); 
    stroke(li); 
    fill(n);
    ellipse(theX, theY, bRad, bRad);
  }
  void mouseEvent(MouseEvent e) {
    pressed = false;
    int mx = e.getX(), my = e.getY();   
    switch (e.getAction()) {
    case MouseEvent.PRESS:
      pressed = overB(mx, my);
      break;
    }
  }
}

1 Ответ

0 голосов
/ 11 июня 2018

Я не совсем уверен в том, что вы спрашиваете, поэтому позвольте мне ответить на несколько разных вещей, которые вас немного смущают.

Я знаю, что большинство современных Java-пользователи считают использование апплета устаревшим

Обратите внимание, что, кроме его имени, PApplet не имеет ничего общего с апплетами.Исторически PApplet был апплетом, но с Обработки 3 это уже не так.PApplet само по себе и не имеет ничего общего с апплетами.

Давайте более подробно рассмотрим этот код:

public class PackServ extends PApplet {
  PApplet SerApp;
  PackServ(PApplet pa) {
    this.SerApp = pa;
    ...

Расширение не имеет смысла расширятьPApplet, а также принять аргумент PApplet в конструкторе.Это означает, что теперь у вас есть два экземпляра PApplet, что почти никогда не то, что вы хотите сделать.

Вместо этого, я думаю, вы, вероятно, хотите избавиться от части extends PApplet и использовать только классы Processingиспользуя вашу переменную serApp.

Я думаю, в этом суть вашего заблуждения: класс PApplet предлагает набор удобных функций, таких как draw() и ellipse(), в основном большинство переменных и функций в обработке.ссылка.Поэтому вам нужен экземпляр PApplet, но этот экземпляр создается для вас при использовании редактора обработки.Вам не нужно создавать свой собственный экземпляр, расширяя класс PApplet.

...