【问题标题】:how to add counter to GUI如何将计数器添加到 GUI
【发布时间】:2012-04-26 17:34:01
【问题描述】:

我希望将计数器添加到我的按钮我还想学习如何设置每个计数器,以便一旦达到我在

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();
        }
    });
}
}
`

请帮助我是个菜鸟,我花了好几个星期才找到如何做到这一点。

【问题讨论】:

  • 欢迎来到 SO。你的具体问题是什么? “一旦达到我在..中设置的计数设置数。” 什么?在你找到一个有通灵者可以回复的论坛之前,我建议你仔细重读你的帖子,如果可以的话,给朋友看,以确保在发帖前有意义。
  • BTW addAButton("Section 1", pane); .. addAButton("Section 9", pane); 在掌握循环之前进行 GUI 编程是一种奇怪的处理方式。这似乎是试图在没有地基、没有结构的房子上画排水沟。
  • 对不起,我的意思是当它达到设定的计数时,它将打开我准备好的 6 个 .exe 文件之一。
  • @user1359327 :明智的做法是与为您的主题提供答案的人进行互动,以便他们能够更好地了解情况,了解您到底卡在哪里以及如何正是为了帮助你,继续前进:-)

标签: java swing user-interface counter


【解决方案1】:

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

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 以创建您自己的自定义按钮,然后您可以将这些方法添加到按钮本身而不是 ButtonListener。

【讨论】:

    【解决方案2】:

    如果你想计算一个按钮被按下的次数,那么你需要一个 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();
        }
    }
    

    如果有语法错误,我自己没有编译,非常抱歉,希望这能帮助你并扩大你的编程能力。

    【讨论】:

      【解决方案3】:

      你需要知道的一切都是HERE。如果您花费数周时间来完成这么多工作,那么通读本教程对您将非常有益。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-12-19
        • 2021-12-25
        • 2014-05-13
        • 2013-04-04
        • 1970-01-01
        • 2012-09-28
        • 1970-01-01
        • 2023-01-14
        相关资源
        最近更新 更多