为什么JComboBox中的字符串返回为null



瓷砖选择

protected void myBox(ActionEvent evt) {
    if (patternList.getSelectedItem() != null) {
        System.out.println(patternList.getSelectedItem().toString());
        getImagePath();
    }
public String getImagePath(){
    jk = patternList.getSelectedItem().toString();
    System.out.println(jk);
    return jk;
}

盒子

 public void TexDefine() throws SlickException, FileNotFoundException{
    TileSelection t = new TileSelection();
    Tex[171]= new Image(t.newSelection);
    textureCollecter();
}

    public int getN(int px, int oy){
    int n;
    if(p==0&&o==0){
        n = 0;
    }else if(p==0){
        n=oy*42;
    }else{
        n=(oy*42)+px;
    }
    return n;
}
if(in.isKeyPressed(Input.KEY_G)){
        TileSelection t = new TileSelection();
        System.out.println(t.jk);
        /*TexTileRenderer(getN(p, o), returnImagePth());*/
    }

我为它的混乱道歉,但我是新手,也是java爱好者,但你能不能真诚地告诉我,当在类之间传输时,String jk是如何变为null的。为什么会这样?

第页。S我使用光滑和lwjgl库只是一个提醒。它很乱,因为我一直在摆弄它,并试图找到解决方案。

谢谢!

    TileSelection t = new TileSelection();
    System.out.println(t.jk);

此时,如果您尚未选择值/默认值,则selectedItem将返回null。

TileSelection构造函数中设置默认选定项,并在分配默认选定项后在构造函数中分配jk

patternList.setSelectedIndex(0);//sets first option in combobox to default value
jk=(String) patternList.getSelectedItem();

EDIT(这也是关于您编辑TileSelection输出代码之前的代码):

另请注意这不是构造函数

public void TileSelection(){
}

构造函数不使用void关键字,因此调用TileSelection t = new TileSelection();将不会执行您想要的方法来创建框架和组合框等,因此jk当然将是null,要么删除void使其成为有效的构造函数,要么执行:

TileSelection t = new TileSelection().TileSelection(); 

不过我想说的是使用一个构造函数,它会生成这样的:

TileSelection t = new TileSelection();

用于创建CCD_ 9的新实例的有效调用。

如果你在我编辑之前遵循了建议,那么你可以:

System.out.println(t.jk);

尽管将实例变量公开为public不是一种好的做法,但这是另一种做法。:)

最新更新