如何在按钮下的 JFrame 中创建一个计数器?

How do I make a counter in a JFrame under the buttons?

我正在尝试编写一个小程序只是为了好玩,我想要它,所以当我单击菠萝按钮时,它会在我想要的按钮下方的一串文本中添加一个菠萝,对于摇滚来说也是如此。所以基本上我需要一个用于岩石和菠萝的计数器,它位于按钮下方,每次按下摇滚按钮和菠萝按钮时都会计数。

这是我目前所拥有的。

public class BGUI extends JFrame{



private JButton pine;
    private JButton rock;

    public BGUI(){
        super("Bikini Bottom Builder Game");
        setLayout(new FlowLayout());

        Icon p = new ImageIcon(getClass().getResource("b.png"));
        pine = new JButton("Add Pineapple", p);
        add(pine);

        Icon r = new ImageIcon(getClass().getResource("b.png"));
        rock = new JButton("Add Rock", r);
        rock.setRolloverIcon(r);
        add(rock);

        Add handler = new Add();
        pine.addActionListener(handler);
        rock.addActionListener(handler);

    }

    private class Add implements ActionListener{
        int pine = 0;
        int rock = 0;
        public void actionPerformed(ActionEvent event){
              pine++;

              rock++;

        }
    }
}

任何帮助将不胜感激!

您可以为此使用单个 GridBagLayoutGroupLayout,但我会使用 combining layouts

要在此处执行此操作,您可能有一个 'outer' 面板 BorderLayout。将已有的带有 FlowLayout 的面板放入边框布局的 CENTER 中。使用流布局创建另一个新面板以放入 'bottom part'。将该面板添加到边框布局的 PAGE_END

    import java.awt.FlowLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.Icon;
    import javax.swing.ImageIcon;
    import javax.swing.JButton;
    import javax.swing.JFrame;

    public class BGUI extends JFrame {
private JButton pine;
private JButton rock;
private int pineappleCount = 0,
        rockCount = 0;

public BGUI(){
    super("Bikini Bottom Builder Game");
    setLayout(new FlowLayout());
    setSize(800, 800);

    Icon p = new ImageIcon(getClass().getResource("b.png"));
    pine = new JButton("Add Pineapple: " + pineappleCount, p);
    pine.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent arg0) {
            pine.setText("Add Pineapple: " + ++pineappleCount);
        }

    });
    add(pine);

    Icon r = new ImageIcon(getClass().getResource("b.png"));
    rock = new JButton("Add Rock: " + rockCount, r);
    rock.setRolloverIcon(r);
    rock.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent arg0) {
            rock.setText("Add Rock: " + ++rockCount);
        }

    });
    add(rock);

    super.setVisible(true);

}


public static void main(String[] a) {
    new BGUI();
}
    }

你的想法是对的。你只是错误地实施了你的听众。我继续为您的按钮添加了一个匿名内部 class 以实现您想要的计数效果。如果您希望计数器位于按钮下方,则需要将 JFrame 组件的布局更改为其他布局并使用 JLabel。