Обработка окна изменения размера и наличие кнопок динамически занимают доступное пространство
Я использую обработку для отображения количества кнопок с API ControlP5. В настоящий момент я могу заставить кнопки отображаться в окне эскиза, но когда я изменяю размер рамки, положения кнопок не обновляются. Есть ли простой способ перерисовать кнопки для их автоматического позиционирования, когда окно изменил размер или я трачу свое время?
Вот код:
package controlp5userinterface;
import java.awt.event.*;
import java.util.ArrayList;
import processing.core.PApplet;
import processing.core.PImage;
import controlP5.*;
public class ControlP5UserInterface extends PApplet {
ControlP5 controlP5;
PImage bg;
Controller b;
@SuppressWarnings("deprecation")
public void setup() {
size(1000,1000);
smooth();
if (frame != null) {
frame.setResizable(true);
}
bg = loadImage("StockBackground1.jpg");
/*
*
* BEGIN CONTROL P5 MENU GENERATION
* buttons will spread out to fit available screen space
*/
controlP5 = new ControlP5(this);
ArrayList<Button> buttons = new ArrayList<Button>();
Group MainMenu = controlP5.addGroup("MainMenu");
MainMenu.setSize(100, 100);
//controlP5.addGroup("MainMenu");
controlP5.addButton("SIMON").setGroup("MainMenu").setSize(80, 50);
controlP5.addButton("ACN").setGroup("MainMenu").setSize(80, 50);
controlP5.addButton("GOOG").setGroup("MainMenu").setSize(80, 50);
//buttons.add(controlP5.addButton("AAPL").setGroup("MainMenu"));
//buttons.add(controlP5.addButton("ACN").setGroup("MainMenu"));
//controlP5.getGroup("MainMenu").setSize(300, 300);
}
/*
*
* SCREEN RESIZE CONTROLLER HERE??(non-Javadoc)
* @see processing.core.PApplet#draw()
*
*/
public void draw() {
background(0); // background black
controlP5.getGroup("MainMenu").update();
}
public int sketchWidth(){
return displayWidth;
}
public int sketchHeight(){
return displayHeight;
}
public static void main(String _args[]) {
PApplet.main(new String[] { controlp5userinterface.ControlP5UserInterface.class.getName() });
}
}
2 ответа
У меня была похожая проблема, и, хотя я довольно новичок в обработке, я нашел способ заставить ее работать. Что я сделал, чтобы это работало, так это то, что я поместил свои элементы GUI в controlGroup и перед обновлением (что я сделал с помощью своей пользовательской функции setGUI()) из-за изменения размера окна я скрыл controlGroup с помощью функции hide() и после обновления я снова отобразил его с помощью функции show(). Надеюсь, это может вам как-то помочь.
Я всегда передал значения, такие как ширина и высота, переменным в заголовке и использовал такие числа, как @1690199, упомянутые в его комментарии к вашему вопросу:
float buttonWidth = 0.02;
float buttonHeight = 0.13;
Button button0, button1, button2, button3;
boolean didSizeChange = false;
а затем обновите свои значения внутриdraw()
функция. Может быть, вам нужно сохранить синглbutton
внутри другой переменной, чтобы иметь возможность обновить ее позже, только если размер экрана изменился.
if( didSizeChange == true ){
buttonP0 = controlP5.addButton("P0", 1, 490, 5, 20, 20);
buttonP0.setColorBackground(gray_);
}
Нашел пример сbuttons
внутри этого репо
Кнопки были определены в этом классе
https://github.com/ranqingfa/Firmware/blob/master/GUI/EvvGC_GUI_v0_4/EvvGC_GUI_v0_4.pde