Java 如何编写';计数';对于使用e.getSource()的按钮?

Java 如何编写';计数';对于使用e.getSource()的按钮?,java,swing,button,Java,Swing,Button,我不知道如何正确地编写这行代码,但我想得到的是,“如果e.getSource的计数为1,则将其设置为0” 是否可以写为: if (count.(e.getSource()) == 1) { count = 0; } 写入count.(e.getSource())的正确方法是什么?e.getSource返回事件最初发生的对象。您可以通过强制转换来获取触发事件的JButton: ((JButton)e.getSource()) 但是,按钮本身不会记录其被单击的次数。您可以只声明一个

我不知道如何正确地编写这行代码,但我想得到的是,“如果
e.getSource
的计数为1,则将其设置为0”

是否可以写为:

if (count.(e.getSource()) == 1)
{
    count = 0;   
}

写入
count.(e.getSource())
的正确方法是什么?

e.getSource
返回事件最初发生的对象。您可以通过强制转换来获取触发事件的JButton:

((JButton)e.getSource())
但是,按钮本身不会记录其被单击的次数。您可以只声明一个变量来跟踪单击

class DrawingSpace extends JPanel
{
    private JButton btn;
    private int count;

    public DrawingSpace(){
        count = 0;
        btn = new JButton("Click me");
        btn.addActionListener(new ActionListener(){
            @Override
            public void actionPerformed(ActionEvent e){
                if (count == 1)
                    count = 0;    
            }
        });
    }
}

e.getSource
返回事件最初发生的对象。您可以通过强制转换来获取触发事件的JButton:

((JButton)e.getSource())
但是,按钮本身不会记录其被单击的次数。您可以只声明一个变量来跟踪单击

class DrawingSpace extends JPanel
{
    private JButton btn;
    private int count;

    public DrawingSpace(){
        count = 0;
        btn = new JButton("Click me");
        btn.addActionListener(new ActionListener(){
            @Override
            public void actionPerformed(ActionEvent e){
                if (count == 1)
                    count = 0;    
            }
        });
    }
}

另一种解决方案是,如果您希望每个按钮都能记住其被单击的次数,则可以创建自定义的JButton:

class MyButton extends JButton
{
    private int numOfClicks;    //Add additional property for JButton

    public MyButton(String name){
        super(name);
        numOfClicks = 0;        
    }

    public int getClicks(){
        return numOfClicks;
    }

    public void setClicks(int clicks){
        this.numOfClicks = clicks;
    }    
}
现在,您的每个自定义按钮都可以记住每个按钮被单击的次数:

class DrawingSpace extends JPanel
{
    private MyButton btn;   
    public DrawingSpace(){
        btn = new MyButton("Click me");
        btn.addActionListener(new ActionListener(){
            @Override
            public void actionPerformed(ActionEvent e){
                MyButton myBtn = (MyButton)e.getSource();
                if (myBtn.getClicks() == 1)
                    myBtn.setClicks(0);    
            }
        });
    }
}

另一种解决方案是,如果您希望每个按钮都能记住其被单击的次数,则可以创建自定义的JButton:

class MyButton extends JButton
{
    private int numOfClicks;    //Add additional property for JButton

    public MyButton(String name){
        super(name);
        numOfClicks = 0;        
    }

    public int getClicks(){
        return numOfClicks;
    }

    public void setClicks(int clicks){
        this.numOfClicks = clicks;
    }    
}
现在,您的每个自定义按钮都可以记住每个按钮被单击的次数:

class DrawingSpace extends JPanel
{
    private MyButton btn;   
    public DrawingSpace(){
        btn = new MyButton("Click me");
        btn.addActionListener(new ActionListener(){
            @Override
            public void actionPerformed(ActionEvent e){
                MyButton myBtn = (MyButton)e.getSource();
                if (myBtn.getClicks() == 1)
                    myBtn.setClicks(0);    
            }
        });
    }
}

说明不需要变量名即可访问所单击按钮的实例。看看这个工作示例:

您的自定义按钮类:

class MyButton extends JButton
{
    private int numOfClicks;    //Add additional property for JButton

    public MyButton(String name){
        super(name);
        numOfClicks = 0;        
    }

    public int getClicks(){
        return numOfClicks;
    }

    public void setClicks(int clicks){
        this.numOfClicks = clicks;
    }    
}
包含用于测试的组件的容器:

class DrawingSpace extends JPanel
{
    private MyButton[] btn;
    private JLabel lblDisplay;   
    public DrawingSpace(){      
        setPreferredSize(new Dimension(450, 100));
        init();
    }

    private void init(){
        btn = new MyButton[5];
        ButtonHandler bh = new ButtonHandler();
        for(int x=0; x<btn.length; x++){
            btn[x] = new MyButton("Button " + (x+1));
            btn[x].addActionListener(bh);
            add(btn[x]);
        }
        lblDisplay = new JLabel("Watch here..");
        add(lblDisplay);
    }

    private class ButtonHandler implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e){
            MyButton myBtn = (MyButton)e.getSource();
            myBtn.setClicks(myBtn.getClicks()+ 1);
            lblDisplay.setText(myBtn.getText() + " was clicked, it has gathered " + myBtn.getClicks() + " so far.");   
        }       
    }
}
class DrawingSpace扩展了JPanel
{
私人MyButton[]btn;
私人JLabel lblDisplay;
公共绘图空间(){
setPreferredSize(新尺寸(450100));
init();
}
私有void init(){
btn=新的MyButton[5];
ButtonHandler bh=新ButtonHandler();

例如(int x=0;x,以说明不需要变量名即可访问所单击按钮的实例。请看此工作示例:

您的自定义按钮类:

class MyButton extends JButton
{
    private int numOfClicks;    //Add additional property for JButton

    public MyButton(String name){
        super(name);
        numOfClicks = 0;        
    }

    public int getClicks(){
        return numOfClicks;
    }

    public void setClicks(int clicks){
        this.numOfClicks = clicks;
    }    
}
包含用于测试的组件的容器:

class DrawingSpace extends JPanel
{
    private MyButton[] btn;
    private JLabel lblDisplay;   
    public DrawingSpace(){      
        setPreferredSize(new Dimension(450, 100));
        init();
    }

    private void init(){
        btn = new MyButton[5];
        ButtonHandler bh = new ButtonHandler();
        for(int x=0; x<btn.length; x++){
            btn[x] = new MyButton("Button " + (x+1));
            btn[x].addActionListener(bh);
            add(btn[x]);
        }
        lblDisplay = new JLabel("Watch here..");
        add(lblDisplay);
    }

    private class ButtonHandler implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e){
            MyButton myBtn = (MyButton)e.getSource();
            myBtn.setClicks(myBtn.getClicks()+ 1);
            lblDisplay.setText(myBtn.getText() + " was clicked, it has gathered " + myBtn.getClicks() + " so far.");   
        }       
    }
}
class DrawingSpace扩展了JPanel
{
私人MyButton[]btn;
私人JLabel lblDisplay;
公共绘图空间(){
setPreferredSize(新尺寸(450100));
init();
}
私有void init(){
btn=新的MyButton[5];
ButtonHandler bh=新ButtonHandler();


对于(int x=0;x您想计算什么?如果e.getSource的计数为1,您能详细说明一下吗?
?anonomuos(无名称)按钮被单击的次数。这就是为什么我有e.getSource()。如果我单击的按钮计数为“1”,则将其重置为0。按钮本身不会跟踪它被单击的次数。您可以在类中声明一个变量来存储它被单击的次数。getSource()的返回类型是什么方法?你想计数什么?你能详细说明一下吗
如果e.getSource的计数是1
?anonomuos(没有名字)按钮被点击的次数。这就是为什么我有e.getSource()。如果我单击的按钮计数为“1”,则将其重置为0。按钮本身不会跟踪它被单击的次数。您可以在类中声明一个变量来存储它被单击的次数。getSource()的返回类型是什么方法?谢谢,但我的按钮都没有名称,程序的用户在运行时生成它们,如果我的按钮有名称,就像在您的程序中一样,那么我可以这样做。但是我的按钮没有名称。@D.Maximov看看下面的另一个解决方案。谢谢,但我的按钮都没有名称,程序的用户在运行时生成它们在运行时,如果我的按钮有名称,就像在你的程序中一样,那么我可以这样做。但是我的按钮没有名称。@D.Maximov看看下面的另一个解决方案。如果你的程序中有多个按钮,但没有一个按钮有名称,会怎么样?你如何判断单击了哪个按钮,并告诉它有多少计数?@D.Maximov
你可以告诉我哪个按钮被点击了。通过使用
e.getSource
并将其转换为
MyButton
,你将得到被点击的按钮的实例。所有按钮现在都可以记录它们自己到目前为止被点击的次数。因此,如果你有20个按钮,可以有20个不同的点击次数记录。不也就是说,
numOfClicks
驻留在
MyButton
类中。你如何测试你的程序?没有main方法。所以我可以得到一个可视化的。谢谢!@D.Maximov只需创建一个
main
并在
JFrame
中添加绘图空间。给我一点时间。上面说你不能将JButton转换为MyButton。应该有b吗还有什么?如果你的程序中有多个按钮,但没有一个按钮有名字呢?你怎么知道哪个按钮被点击了,以及它有多少计数?@D.Maximov
你怎么知道哪个按钮被点击了呢单击的按钮。所有按钮现在都可以记录它们自己到目前为止被单击的次数。因此,如果您有20个按钮,则可以有20个不同的单击次数记录。请注意,
numfclicks
驻留在
MyButton
类中。您将如何测试您的程序?没有主方法。因此我可以获得一个可视化的al.Thank!@D.Maximov只需创建一个
main
并在
JFrame
中添加绘图空间。请稍等。上面说您不能将JButton转换为MyButton。应该还有其他内容吗?非常感谢您的帮助!@D.Maximov请记住接受我的解决方案