如何在我想要的时候显示我的按钮?

时间:2016-10-04 15:30:50

标签: java swing jpanel jbutton actionlistener

我正在为我的女朋友做这个游戏,而且我已经被困在同一个问题上几天了。基本上,我希望她能够按下" Gather Wood"按钮5次然后,第五次按下它后,"创建火"按钮应弹出。

1.问题在于,无论我尝试将方法编程为显示在第五个按钮的哪个方向按下,它都不会显示出来。

  1. 我会很感激任何编码提示或其他任何想法我都可以做的事情来清理我当前的代码。

    private static JPanel panel;
    private static int woodCounter;
    private static int leafCounter;
    private static JFrame frame;
    
  2. 这是聚集木按钮

    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;
    }
    
  3. 这是创建开火按钮

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

1 个答案:

答案 0 :(得分:2)

  

基本上,我希望她能够按下“Gather Wood”按钮5次,然后在第五次按下它之后,会弹出“Create Fire”按钮。

我没有看到任何“if logic”告诉代码做任何事情。

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

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

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

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

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