Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 处理调整窗口大小并使按钮动态占用可用空间_Java_Processing_Control P5 - Fatal编程技术网

Java 处理调整窗口大小并使按钮动态占用可用空间

Java 处理调整窗口大小并使按钮动态占用可用空间,java,processing,control-p5,Java,Processing,Control P5,我使用processing来显示Controlp5API中的许多按钮。目前,我可以让按钮显示在草图窗口中,但当我调整框架大小时,按钮位置不会更新,是否有一种简单的方法重新绘制按钮,以便在调整窗口大小时自动重新定位按钮,或者我是在浪费时间 代码如下: package controlp5userinterface; import java.awt.event.*; import java.util.ArrayList; import processing.core.PApplet; import

我使用processing来显示Controlp5API中的许多按钮。目前,我可以让按钮显示在草图窗口中,但当我调整框架大小时,按钮位置不会更新,是否有一种简单的方法重新绘制按钮,以便在调整窗口大小时自动重新定位按钮,或者我是在浪费时间

代码如下:

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() });
}
packagecontrolp5userinterface;
导入java.awt.event.*;
导入java.util.ArrayList;
导入处理.core.PApplet;
导入加工.core.PImage;
进口管制P5.*;
公共类ControlP5UserInterface扩展了PApplet{
控制p5控制p5;
皮马杰bg;
控制器b;
@抑制警告(“弃用”)
公共作废设置(){
尺寸(10001000);
光滑的();
如果(帧!=null){
frame.setresizeable(true);
}
bg=loadImage(“StockBackground1.jpg”);
/*
* 
*开始控制P5菜单生成
*按钮将展开以适应可用的屏幕空间
*/
controlP5=新的controlP5(本);
ArrayList按钮=新建ArrayList();
组主菜单=控制p5.addGroup(“主菜单”);
主菜单。设置大小(100100);
//controlP5.addGroup(“主菜单”);
controlP5.addButton(“SIMON”).setGroup(“主菜单”).setSize(80,50);
controlP5.addButton(“ACN”).setGroup(“主菜单”).setSize(80,50);
controlP5.addButton(“GOOG”).setGroup(“主菜单”).setSize(80,50);
//buttons.add(controlP5.addButton(“AAPL”).setGroup(“主菜单”));
//buttons.add(controlP5.addButton(“ACN”).setGroup(“主菜单”));
//controlP5.getGroup(“主菜单”).setSize(300300);
}
/*
* 
*此处屏幕调整控制器大小???(非Javadoc)
*@see processing.core.PApplet#draw()
* 
*/
公众抽签(){
背景(0);//背景黑色
controlP5.getGroup(“主菜单”).update();
}
公共int sketchWidth(){
返回显示宽度;
}
公共高度(){
返回显示高度;
}
公共静态void main(字符串_参数[]){
main(新字符串[]{controlp5userinterface.controlp5userinterface.class.getName()});
}

}

我也遇到了类似的问题,尽管我对处理相当陌生,但我找到了一种方法让它工作起来。我所做的工作是将我的GUI元素放入一个控制组,在更新它之前(我使用自定义函数setGUI()),由于窗口大小的改变,我使用函数hide()隐藏了控制组,在更新之后,我再次使用show()函数显示它。
希望这能对您有所帮助。

您需要相对于尺寸进行绘制,以便沿框架调整大小。例如:
setSize(宽度*0.02,高度*0.13)我已经尝试过了,但是由于所有的设置都是在setup()方法中进行的,所以只调用了一次,并且尝试更新draw()循环中的大小似乎不起作用