Java 从列表中获取所选项目

Java 从列表中获取所选项目,java,libgdx,game-development,Java,Libgdx,Game Development,我目前正在创建一个库存系统,在该系统中,用户将从列表中选择一个项目,右侧的图标将根据用户拾取的项目进行更新 我需要一种方法来获取用户当前选择的列表项。然后,我需要使用该列表项来显示用户将看到的图标 目前,我已尝试在库存列表上使用getSelected()方法,该方法似乎只返回列表中的第一项。我需要一种方法来获取用户当前选择的项目 我需要在名为“库存”的列表中选择当前项目 package com.sps.game.inventory; import com.badlogic.gdx.Gdx; i

我目前正在创建一个库存系统,在该系统中,用户将从列表中选择一个项目,右侧的图标将根据用户拾取的项目进行更新

我需要一种方法来获取用户当前选择的列表项。然后,我需要使用该列表项来显示用户将看到的图标

目前,我已尝试在库存列表上使用getSelected()方法,该方法似乎只返回列表中的第一项。我需要一种方法来获取用户当前选择的项目

我需要在名为“库存”的列表中选择当前项目

package com.sps.game.inventory;

import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Input;
import com.badlogic.gdx.InputProcessor;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.scenes.scene2d.*;
import com.badlogic.gdx.scenes.scene2d.ui.*;

import com.badlogic.gdx.utils.viewport.FitViewport;
import com.badlogic.gdx.utils.viewport.Viewport;
import com.sps.game.controller.InventoryController;
import com.sps.game.controller.PlayerController;

public class PlayerInventory {
    public Stage stage;
    public SpriteBatch sb;
    private Viewport viewport;

    private Skin skin = new Skin(Gdx.files.internal("core/assets/pixthulhuui/pixthulhu-ui.json"));

    private List<Item> inventory;
    private List<Image> itemImages;

    private InventoryController inventoryController;
    private InputProcessor oldInput;


    public PlayerInventory(SpriteBatch sb, PlayerController playerController) {
        this.sb = sb;
        viewport = new FitViewport(Gdx.graphics.getWidth(), Gdx.graphics.getHeight(), new OrthographicCamera());
        stage = new Stage(viewport, sb);

        inventoryController = new InventoryController();
        inventory = inventoryController.getInventoryList();
        itemImages = inventoryController.getImageList();
    }

    private void formatting() {
        stage = new Stage();
        Label inventoryLabel = new Label("Inventory", skin);
        Label imageLabel = new Label("Item", skin);

        Table table = new Table(skin);
        table.setDebug(true);
        table.defaults();
        table.center();
        table.setFillParent(true);
        table.add(inventoryLabel);
        table.add(imageLabel);
        table.row();


        table.add(inventory); //need a way to get the current item selected 
        table.add(itemImages.getSelected()); 

        stage.addActor(itemImages);
        stage.addActor(table);
    }
    public void setInput() {
        oldInput = Gdx.input.getInputProcessor(); //Get the old input from the user.
        Gdx.input.setInputProcessor(stage);       //Set the input to now work on the inventory.
    }

    public void update() {
        if (Gdx.input.isKeyPressed(Input.Keys.I) && oldInput == null) {
            formatting();
            setInput();
        }

        if (Gdx.input.isKeyPressed(Input.Keys.O) && oldInput != null) {
            stage.dispose();
            Gdx.input.setInputProcessor(oldInput);
            oldInput = null;
        }
    }

    public void dispose() {
        stage.dispose();
    }

}
包com.sps.game.inventory;
导入com.badlogic.gdx.gdx;
导入com.badlogic.gdx.Input;
导入com.badlogic.gdx.InputProcessor;
导入com.badlogic.gdx.graphics.Orthographic Camera;
导入com.badlogic.gdx.graphics.g2d.SpriteBatch;
导入com.badlogic.gdx.scenes.scene2d.*;
导入com.badlogic.gdx.scenes.scene2d.ui.*;
导入com.badlogic.gdx.utils.viewport.FitViewport;
导入com.badlogic.gdx.utils.viewport.viewport;
导入com.sps.game.controller.InventoryController;
导入com.sps.game.controller.PlayerController;
公营游乐场{
公共舞台;
公共精神鞭策某人;
私有视口;
私有皮肤=新皮肤(Gdx.files.internal(“core/assets/pixthuluui/pixthuluui.json”);
私人清单清单;
私有列表项目图像;
私有库存控制器库存控制器;
专用输入处理器;
公共播放器档案(SpriteBatch sb,播放器控制器播放器控制器){
这是;
viewport=new-FitViewport(Gdx.graphics.getWidth(),Gdx.graphics.getHeight(),new-orthographic-camera());
阶段=新阶段(视口,sb);
inventoryController=新的inventoryController();
inventory=inventoryController.getInventoryList();
itemImages=inventoryController.getImageList();
}
私有void格式化(){
阶段=新阶段();
标签库存标签=新标签(“库存”,皮肤);
标签图像标签=新标签(“项目”,皮肤);
表=新表(皮肤);
表.setDebug(true);
table.defaults();
table.center();
表.setFillParent(true);
表.添加(库存标签);
表.添加(图像标签);
table.row();
table.add(inventory);//需要一种方法来选择当前项目
table.add(itemImages.getSelected());
stage.addActor(itemmages);
阶段。加法器(表);
}
公共void setInput(){
oldInput=Gdx.input.getInputProcessor();//从用户处获取旧输入。
Gdx.input.setInputProcessor(stage);//将输入设置为现在在清单上工作。
}
公共无效更新(){
if(Gdx.input.isKeyPressed(input.Keys.I)和&oldInput==null){
格式化();
setInput();
}
if(Gdx.input.isKeyPressed(input.Keys.O)&&oldInput!=null){
stage.dispose();
Gdx.input.setInputProcessor(oldInput);
oldInput=null;
}
}
公共空间处置(){
stage.dispose();
}
}

我通过使用Clicklistener找到了解决方案

    inventory.addListener(new ClickListener() {
        public void clicked(InputEvent event, float x, float y) {
            String clickedItem = inventory.getSelected();
            table.add(clickedItem);
            System.out.println(item.getName());
            }
        });

请添加描述
项目的代码
classI认为解决此问题不需要此代码。库存集合只是项目对象的列表。每个项目负责它自己的图标,它可以通过调用GeTimeAGE()方法来检索。你如何知道玩家当前选择了什么?请考虑编辑这个问题,而不是张贴另一个你提供的细节,这是编辑功能的目的。删除两个问题中的一个,下面是如何解决的:我看到您解决了从中的列表中获取选定项的问题。请考虑为这个问题增加一个自我回答,让更多的人受益。这个社区甚至鼓励这样做D我一贴出这条评论,你就回答了你自己的问题,我觉得好傻哈哈