繁体   English   中英

单击Javafx2修改按钮

[英]Javafx2 modify button when clicked

我试图做到这一点,所以当单击按钮时,我可以更改其属性之一。

class Tile extends Button{
  public int position[];
  public Tile(){
    super();
    position = 0;
  }

 }

初始化位置:

{
  Tile tiles [][] = new Tile[10][10];
  for(int i=0; i<10; i ++){
    for(int j =0; j<10; j++){
      tiles[i][j].position = i*10+j;
      tiles[i][j].addEventHandler(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>(){
                @Override
                public void handle(MouseEvent e) {
                    System.out.println(((Tile)(e.getSource())).position[1]); //this results in a null pointer
                }
            });
    }
  }
}

我希望该程序在单击时在磁贴中打印出位置值。 有什么方法可以访问事件所引用的对象? 我真的只需要知道单击阵列中的哪个图块。 编辑:当我尝试使用e.getSource()时,我得到了NullPointerException

将该位置声明为Array,但将其声明为Int。

将其更改为简单的int应该可以解决您的问题。

class Tile extends Button{
  public int position;
  public Tile(){
    super();
    position = 0;
  }

 }

初始化方法:

{
  Tile tiles [][] = new Tile[10][10];
  for(int i=0; i<10; i ++){
    for(int j =0; j<10; j++){
      tiles[i][j].position = i*10+j;
      tiles[i][j].addEventHandler(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>(){
                @Override
                public void handle(MouseEvent e) {
                    System.out.println(((Tile)(e.getSource())).position);
                }
            });
    }
  }
}

如用户PeekaySwitch所述,您可以获得按钮触发的事件的来源,在这种情况下,它就是按钮。 您所需要做的就是进行强制类型转换,以获取所需对象的正确类型:

@Override public void handle(ActionEvent e) 
{
    Button button = (Button) e.getSource();
}

完成此操作后,您只需要获取对象属性并按所需方式处理它们即可。 不要忘记JavaFX中的事件类型都是Java标准库的一部分

关于其异常null值,您犯了一个基本的语言错误。 下一个代码片段将启动对对象数组的引用:

Tile tiles [][] = new Tile[10][10];

但是,您不是在矢量中启动对象。 尝试通过执行以下操作启动每个Tile对象:

tiles[i][j] = new Tile();

将此代码放在嵌套循环内,并在每个使用的Tile对象之前。

希望这对您有所帮助。 祝好运。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM