java中动态创建的JButton上的getLocation

java中动态创建的JButton上的getLocation,java,swing,dynamic,jbutton,null-layout-manager,Java,Swing,Dynamic,Jbutton,Null Layout Manager,好的,我用下面的代码在一个J面板上用一个空布局动态地制作了一行J按钮: int Y = 100; int X = 100; for(x=1, x<=20, x++){ button = new JButton(x); button.setLayout(null); button.setSize(100, 100); button.setLocation(X,Y); button.setVisible(true); panel.add(butt

好的,我用下面的代码在一个J面板上用一个空布局动态地制作了一行J按钮:

int Y = 100;
int X = 100;
for(x=1, x<=20, x++){
    button = new JButton(x);
    button.setLayout(null);
    button.setSize(100, 100);
    button.setLocation(X,Y);
    button.setVisible(true);
    panel.add(button); 

    X += 100;

    //action listener
    button.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            //should print out the location of the button that was clicked
            System.out.println(button.getLocation());
        }
    });
}
inty=100;
int X=100;

对于(x=1,x每次运行循环时,
按钮
变量都会被重新定义,因此当您最终调用
actionPerformed
方法时,您正在读取最后一个按钮的数据。循环在任何事件发生之前完成,并保存了在
按钮
变量中创建的最后一个按钮的引用

您需要从事件对象引用
按钮
,因为它包含对作为事件源的按钮的引用:

button.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        //should print out the location of the button that was clicked
        System.out.println( ((JButton)e.getSource()).getLocation() );
    }
});

调用
addActionListener
方法20次,但是
actionPerformed
方法是异步调用的,并且仅在操作事件(例如:单击按钮)时调用发生。ActionEvent对象包含有关事件的信息,其中包括事件源,即您的按钮。

每次运行循环时,
按钮
变量都会被重新定义,因此当您最终调用
actionPerformed
方法时,您正在读取最后一个按钮的数据。循环完成在任何事件发生之前,保存在
按钮
变量中创建的最后一个按钮的引用

您需要从事件对象引用
按钮
,因为它包含对作为事件源的按钮的引用:

button.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        //should print out the location of the button that was clicked
        System.out.println( ((JButton)e.getSource()).getLocation() );
    }
});

调用
addActionListener
方法20次,但是
actionPerformed
方法是异步调用的,并且仅在操作事件(例如:单击按钮)时调用发生。ActionEvent对象包含有关事件的信息,其中包括事件源,即您的按钮。

每次运行循环时,
按钮
变量都会被重新定义,因此当您最终调用
actionPerformed
方法时,您正在读取最后一个按钮的数据。循环完成在任何事件发生之前,保存在
按钮
变量中创建的最后一个按钮的引用

您需要从事件对象引用
按钮
,因为它包含对作为事件源的按钮的引用:

button.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        //should print out the location of the button that was clicked
        System.out.println( ((JButton)e.getSource()).getLocation() );
    }
});

调用
addActionListener
方法20次,但是
actionPerformed
方法是异步调用的,并且仅在操作事件(例如:单击按钮)时调用发生。ActionEvent对象包含有关事件的信息,其中包括事件源,即您的按钮。

每次运行循环时,
按钮
变量都会被重新定义,因此当您最终调用
actionPerformed
方法时,您正在读取最后一个按钮的数据。循环完成在任何事件发生之前,保存在
按钮
变量中创建的最后一个按钮的引用

您需要从事件对象引用
按钮
,因为它包含对作为事件源的按钮的引用:

button.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        //should print out the location of the button that was clicked
        System.out.println( ((JButton)e.getSource()).getLocation() );
    }
});

调用
addActionListener
方法20次,但是
actionPerformed
方法是异步调用的,并且仅在操作事件(例如:单击按钮)时调用发生。ActionEvent对象包含有关事件的信息,其中包括事件源,即您的按钮。

Java GUI可能必须在多个平台、不同的屏幕分辨率和使用不同的PLAF上工作。因此,它们不利于组件的精确放置。要组织组件以进行obust GUI使用布局管理器,或者与布局填充和边框一起使用。Java GUI可能必须在多个平台、不同的屏幕分辨率和使用不同的PLAF上工作。因此,它们不利于组件的精确放置。要组织组件以获得强健的GUI,请使用布局管理器,或者使用.Java GUI的布局填充和边框可能需要在多个平台、不同的屏幕分辨率和使用不同的PLAF上工作。因此,它们不利于组件的精确放置。要组织组件以获得健壮的GUI,请使用布局管理器,或者使用.Java GUI的布局填充和边框migh不必在多个平台上工作,在不同的屏幕分辨率和使用不同的PLAF。因此,它们不利于组件的精确放置。要组织组件以获得健壮的GUI,请使用布局管理器,或者使用布局填充和边框。