Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在GUI中添加计数器_Java_Swing_User Interface_Counter - Fatal编程技术网

Java 如何在GUI中添加计数器

Java 如何在GUI中添加计数器,java,swing,user-interface,counter,Java,Swing,User Interface,Counter,我希望将计数器添加到我的按钮中。我还想学习如何设置每个计数器,以便在达到我在按钮中设置的计数数后,可以让它在我的计算机上打开一个文件 package layout; import java.awt.Component; import java.awt.Container; import javax.swing.BoxLayout; import javax.swing.JButton; import javax.swing.JFrame; public class BoxLayoutDemo

我希望将计数器添加到我的按钮中。我还想学习如何设置每个计数器,以便在达到我在按钮中设置的计数数后,可以让它在我的计算机上打开一个文件

package layout;

import java.awt.Component;
import java.awt.Container;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;

public class BoxLayoutDemo {
    public static void addComponentsToPane(Container pane) {
        pane.setLayout(new BoxLayout(pane, BoxLayout.Y_AXIS));
    addAButton("Section 1", pane);
    addAButton("Section 2", pane);
    addAButton("Section 3", pane);
    addAButton("Section 4", pane);
    addAButton("Section 5", pane);
    addAButton("Section 6", pane);
    addAButton("Section 7", pane);
    addAButton("Section 8", pane);
    addAButton("Section 9", pane);
}

private static void addAButton(String text, Container container) {
    JButton button = new JButton(text);
    button.setAlignmentX(Component.CENTER_ALIGNMENT);
    container.add(button);
}


private static void createAndShowGUI() {

    JFrame frame = new JFrame("Counter");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


    addComponentsToPane(frame.getContentPane());

    frame.pack();
    frame.setVisible(true);
}

public static void main(String[] args) {
    javax.swing.SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            createAndShowGUI();
        }
    });
}
}
`

请帮助我,我是一个noob,我花了数周的时间才找到如何做到这一点。

在您的代码中,您已向容器添加了一个按钮,但尚未向该按钮添加任何侦听器,因此它不会通过单击该按钮执行任何操作

private static void addAButton(String text, Container container) { 
    JButton button = new JButton(text); 
    button.setAlignmentX(Component.CENTER_ALIGNMENT); 
    container.add(button); 
} 
因此,您需要向按钮添加一个ActionListener,并让它增加一个计数器。在动作侦听器中,可以添加计数器

新代码可能如下所示:

private static void addAButton(String text, Container container) { 
    JButton button = new JButton(text); 
    button.setAlignmentX(Component.CENTER_ALIGNMENT); 
    button.addActionListener(new ButtonListener());
    container.add(button);
} 

class ButtonListener implements ActionListener {
    int numClicks;
    static int buttonClicks = 0;
    ButtonListener() {
        numClicks = 0;
    }
    public void actionPerformed(ActionEvent e) {
        buttonClicks++;
        numClicks++;
        // do some action
    }
    public int getNumClicks() { return numClicks; }
    static public int getButtonClicks() { return buttonClicks; }
}
在本例中,我添加了两种方法: 1 getNumClicks:获取此ButtonListener实例中的单击次数只要向每个按钮添加新的ButtonListener,每个按钮的单击次数都是唯一的。 2个getButtonClicks:获取所有实例的点击次数


更好的方法是扩展JButton来创建您自己的自定义按钮,然后您可以将这些方法添加到按钮本身,而不是按钮Listener。

如果您想计算按钮被按下的次数,那么您需要一个ActionListener。以下是这样一个例子:

public class IListen implements ActionListener
{
    int hits = 0;
    public IListen()
    {
        JFrame frame = new JFrame("Title");
        JPanel panel = new JPanel();
        JButton button = new JButton("hello!");
        button.addActionListener(this);
        panel.add(button);
        frame.add(panel);
        frame.setSize(200,200);
        frame.setVisible(true);
    }

    @Override
    public void actionPerformed(ActionEvent e)
    {
         JButton source = e.getSource();
         if(source == button)
            hits++;

        System.out.println("you hit my button "+hits+" times!");
    }

    public static void main(String args[])
    {
        new IListen();
    }
}

我自己还没有编译过,如果出现语法错误,我很抱歉,希望这能帮助您解决问题,拓宽您的编程能力。

要想做什么,您需要知道的一切都是。如果你花了几周的时间才完成了这么多,那么彻底阅读本教程将非常有益。

欢迎阅读本教程。你的具体问题是什么?一旦达到我在..中设置的计数数。。什么?在你找到一个有通灵者的论坛来回复之前,我建议你仔细阅读你的帖子,如果可以的话,给一个朋友,以确保它在发布之前是有意义的。顺便说一句,AddAbutOnSection 1,pane。。增补第9节,窗格;在掌握循环之前进行GUI编程是一种奇怪的方式。这就像是试图在一座没有地基、没有结构的房子上粉刷排水沟。对不起,我的意思是当它达到一个设定的计数时,它会打开我准备好的6.exe文件中的一个。@user1359327:明智的做法是,你与为你的线程提供答案的人互动,以便他们能够更好地了解情况,了解您的具体处境,以及如何帮助您继续前进:-