2015-05-30 3 views
1

Я пытаюсь работать над небольшой программой только для удовольствия, и я хочу, чтобы это было, когда я нажимаю кнопку ананаса, она добавляет ананас к строке текста, которую я хочу под кнопками, то же самое для рок. Поэтому в основном мне нужен счетчик для скалы и ананаса, который идет под кнопками, которые просто подсчитываются каждый раз, когда нажата кнопка рок, и нажата кнопка ананаса.Как создать счетчик в JFrame под кнопками?

Это то, что у меня есть до сих пор.

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++; 

     } 
    } 
} 

Любая помощь будет принята с благодарностью!

ответ

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

У вас была правильная идея. Вы просто неправильно использовали своих слушателей. Я пошел вперед и добавил анонимный внутренний класс к вашим кнопкам, чтобы сделать этот счетный эффект, который вы хотели. Если вы хотите, чтобы счетчик находился под кнопками, вам нужно будет изменить компоновку компонента JFrame на что-то еще и использовать JLabel.

2

Для этого вам может понадобиться одиночный GridBagLayout или GroupLayout, но я бы подошел к нему combining layouts.

Для этого у вас может быть «внешняя» панель, которая равна BorderLayout. Поместите существующую панель с FlowLayout в таблицу CENTER. Создайте еще одну новую панель с раскладкой, чтобы поместить «нижнюю часть». Добавьте эту панель в PAGE_END макета границы.

Смежные вопросы