java - 如何让按钮在我想要的时间显示?

标签 java swing jpanel jbutton actionlistener

我正在为我的女朋友开发这款游戏,几天来我一直被同样的问题困扰。基本上,我希望她能够按“收集木材”按钮 5 次,然后,在她第五次按后,“生火”按钮应该弹出。

1.问题是,无论我尝试以哪种方式编程该方法以显示在按下第五个按钮时,它都不会显示。

  • 如果有任何编码技巧或你们认为我可以做的任何事情来清理我当前的代码,我将不胜感激。

    private static JPanel panel;
    private static int woodCounter;
    private static int leafCounter;
    private static JFrame frame;
    
  • 这是收集木材按钮

    public static int gatherWood() {
    woodCounter = 0;
    
    JButton wood = new JButton("Gather Wood");
    
    wood.addActionListener(new ActionListener() {
    
        @Override
        public void actionPerformed(ActionEvent event) {
            System.out.println("Gathering Wood");
            woodCounter++;
            woodCounter++;
            System.out.println(woodCounter);
        }
    });
    
    wood.setVisible(true);
    panel.add(wood, new FlowLayout(FlowLayout.CENTER));
    
    return woodCounter;
    }
    
  • 这是创建火按钮

    public static void createFire() {
    JButton fire = new JButton("Create Fire");
    
    fire.addActionListener(new ActionListener() { 
    
        @Override
        public void actionPerformed(ActionEvent event) {
            System.out.println("Creating a fire.");
    
            woodCounter = woodCounter - 10;
        }
    });
    
    fire.setVisible(true);
    panel.add(fire, new FlowLayout(FlowLayout.CENTER));
    } 
    
  • 最佳答案

    Basically, I want her to be able to press the "Gather Wood" button 5 times then, right after she presses it the fifth time, the "Create Fire" button should pop up.

    我在任何地方都没有看到任何告诉代码执行任何操作的“if 逻辑”。

    一旦你修复了这个问题(并验证“createFire()`方法被调用),我怀疑下一个问题是,当你将组件添加到可见的 Swing GUI 时,基本代码应该是:

    panel.add(...);
    panel.revalidate();
    panel.repaint();
    

    您需要 revalidate() 来调用布局管理器,否则添加的组件的大小为 (0, 0) 并且没有任何内容可绘制。

    panel.add(fire, new FlowLayout(FlowLayout.CENTER));
    

    不要一直尝试更改布局管理器。这不是第二个参数的用途。面板的布局管理器只能在创建面板时设置一次。

    关于java - 如何让按钮在我想要的时间显示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39856325/

    相关文章:

    java - 自动查找使用次数的方法?

    java - 我怎么知道我是否在事件派发线程上?

    java - 如何检测 Jscrollpane 中的滚动条被拖动/单击?

    java - 将 JPanel 动态添加到 JScrollPane

    java - 在黑白图像上查找未连接区域(岛屿)的算法

    java - xml 解码错误 jaxb 预期元素中存在意外元素

    java - JAXB 类型问题

    java - 如何向 JTextarea 添加文本而不删除它之前的文本? java

    Swing 线程中的 Java 操作

    java - 具有自动调整大小、水平滚动和可收缩第一列的 JTable