Java 向表格单元格LibGDX添加加号/减号按钮
我正在寻找一种在LibGDX中向表格单元格添加加号和减号按钮的方法。 我试着做一些像这样的事情: 我注意到我正在使用的uiskin文件包含加号和减号按钮(就在复选框旁边),这些按钮可以正常工作() 关于如何将它们添加到表中并使其增加/减少该表单元格中的整数值,有什么提示吗 我添加了一个基本的示例代码,说明了我要做的事情:Java 向表格单元格LibGDX添加加号/减号按钮,java,layout,libgdx,scene2d,Java,Layout,Libgdx,Scene2d,我正在寻找一种在LibGDX中向表格单元格添加加号和减号按钮的方法。 我试着做一些像这样的事情: 我注意到我正在使用的uiskin文件包含加号和减号按钮(就在复选框旁边),这些按钮可以正常工作() 关于如何将它们添加到表中并使其增加/减少该表单元格中的整数值,有什么提示吗 我添加了一个基本的示例代码,说明了我要做的事情: @Override public void create() { Stage stage = new Stage(); Skin skin = new Ski
@Override
public void create() {
Stage stage = new Stage();
Skin skin = new Skin(Gdx.files.internal("skins/uiskin.json"));
Table table = new Table(skin);
table.setPosition(Gdx.graphics.getWidth() / 2, Gdx.graphics.getHeight() / 2);
for(int i = 0; i < 10; i++){
table.add(Integer.toString(i)); //Somehow add plus/minus buttons left
//and right that increase/decrease the integer value
table.row();
}
stage.addActor(table);
Gdx.input.setInputProcessor(stage);
}
@Override
public void render() {
Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
stage.act(Gdx.graphics.getDeltaTime());
stage.draw();
}
@覆盖
公共void create(){
阶段=新阶段();
皮肤=新皮肤(Gdx.files.internal(“skins/uiskin.json”);
表=新表(皮肤);
table.setPosition(Gdx.graphics.getWidth()/2,Gdx.graphics.getHeight()/2);
对于(int i=0;i<10;i++){
table.add(Integer.toString(i));//以某种方式在左侧添加加号/减号按钮
//右键,增加/减少整数值
table.row();
}
阶段。加法器(表);
Gdx.input.setInputProcessor(阶段);
}
@凌驾
公共无效呈现(){
glClearColor(0,0,0,1);
Gdx.gl.glClear(GL20.gl\u颜色\u缓冲\u位);
stage.act(Gdx.graphics.getDeltaTime());
stage.draw();
}
这只是一些示例代码,但如果它在这里起作用,我肯定能够理解它
谢谢首先,您需要一个数组来存储数值。使用视图(表格单元格)存储模型(数值)不是一种好的做法,此外,标签单元格存储的是字符串,而不是整数,因此不方便
private int[] tableData = new int[10];
现在,您需要一个可以与数据中的行关联的按钮。下面是创建ImageButton子类的一种方法,该子类可以采用行号和模式(减法或加法)
您正在使用的uiskin地图集中的加号和减号图像称为“树减号”和“树加号”。对于使用其中一个作为imageUp
属性的每个按钮,都需要一个ImageButton样式。(imageUp
是默认值,如果您没有为其他状态定义图像,例如imageDown
),您可以将这些添加到uiskin.json:
com.badlogic.gdx.scenes.scene2d.ui.ImageButton$ImageButtonStyle:{
plus:{down:default round down,up:default round,imageUp:tree plus},
减号:{向下:默认向下取整,向上:默认向下取整,图像向上:树减号}
},
现在您可以为这些按钮创建一个ChangeListener,它将修改数据中的数字并相应地更新表。然后把一切都安排好:
Stage stage = new Stage();
Skin skin = new Skin(Gdx.files.internal("skins/uiskin.json"));
final Table table = new Table(skin);
final Label[] labels = new Label[tableData.length]; //keep references to the labels for updating them.
final ChangeListener incrementListner = new ChangeListener() {
@Override
public void changed(ChangeEvent event, Actor actor) {
IncrementButton incrementButton = (IncrementButton)actor;
int row = incrementButton.rowNumber;
tableData[row] += incrementButton.decrement ? -1 : 1;
labels[row].setText(Integer.toString(tableData[row]));
}
};
table.setPosition(Gdx.graphics.getWidth() / 2, Gdx.graphics.getHeight() / 2);
for(int i = 0; i < tableData.length; i++){
IncrementButton decrementButton = new IncrementButton(skin, "minus", i, true);
decrementButton.addListener(incrementListner);
IncrementButton incrementButton = new IncrementButton(skin, "plus", i, false);
incrementButton.addListener(incrementListner);
table.add(decrementButton);
labels[i] = table.add(Integer.toString(i)).getActor();//Add number label and keep reference to it in labels array for the change listener to look up
table.add(incrementButton);
table.row();
}
stage.addActor(table);
Gdx.input.setInputProcessor(stage);
Stage阶段=新阶段();
皮肤=新皮肤(Gdx.files.internal(“skins/uiskin.json”);
最终表格=新表格(皮肤);
最终标签[]标签=新标签[tableData.length]//保留对标签的引用以进行更新。
final ChangeListener incrementListner=新的ChangeListener(){
@凌驾
公共无效已更改(ChangeEvent事件、参与者){
IncrementButton IncrementButton=(IncrementButton)参与者;
int行=incrementButton.rowNumber;
tableData[行]+=递增按钮。递减?-1:1;
labels[row].setText(Integer.toString(tableData[row]);
}
};
table.setPosition(Gdx.graphics.getWidth()/2,Gdx.graphics.getHeight()/2);
对于(int i=0;i
如果要为数据设置最小值和最大值,则需要一些加号按钮和减号按钮的数组(类似于
标签数组),以便更改侦听器可以在达到限制时查找并相应地禁用/启用按钮。首先,需要创建2个ImageButton
,比如说minusButton
和plusbbutton
。只需看看这些图片,看看如何从你的皮肤中创建它们。然后,您只需要将这些按钮添加到表中:table.add(plusButton)代码>表格。添加(减号按钮)
@vdlmrc我已经试过了,但有两个问题:1)uiskin似乎没有检索这些按钮的方法(例如,您可以调用复选框来获取复选框,但我在文件描述中找不到任何加号/减号按钮的引用),以及2)如果我创建自己的按钮并将其添加到表中,然后我找不到一种方法来引用它旁边的单元格。。。
Stage stage = new Stage();
Skin skin = new Skin(Gdx.files.internal("skins/uiskin.json"));
final Table table = new Table(skin);
final Label[] labels = new Label[tableData.length]; //keep references to the labels for updating them.
final ChangeListener incrementListner = new ChangeListener() {
@Override
public void changed(ChangeEvent event, Actor actor) {
IncrementButton incrementButton = (IncrementButton)actor;
int row = incrementButton.rowNumber;
tableData[row] += incrementButton.decrement ? -1 : 1;
labels[row].setText(Integer.toString(tableData[row]));
}
};
table.setPosition(Gdx.graphics.getWidth() / 2, Gdx.graphics.getHeight() / 2);
for(int i = 0; i < tableData.length; i++){
IncrementButton decrementButton = new IncrementButton(skin, "minus", i, true);
decrementButton.addListener(incrementListner);
IncrementButton incrementButton = new IncrementButton(skin, "plus", i, false);
incrementButton.addListener(incrementListner);
table.add(decrementButton);
labels[i] = table.add(Integer.toString(i)).getActor();//Add number label and keep reference to it in labels array for the change listener to look up
table.add(incrementButton);
table.row();
}
stage.addActor(table);
Gdx.input.setInputProcessor(stage);