[英]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.