GUI - запись номеров, назначенных кнопкам - PullRequest
1 голос
/ 02 ноября 2011

Кто-нибудь знает, как хранить числа на JButtons?Например, каждый раз, когда пользователь нажимает кнопку, я хочу записать это число.

Ответы [ 4 ]

3 голосов
/ 02 ноября 2011

Вы должны использовать ActionListener, и вы можете использовать список, как показано ниже:

enter image description here

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;


public class NumberButtons extends JFrame {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new NumberButtons().setVisible(true);
            }
        });
    }
    private List<JButton> buttons = new ArrayList<JButton>();
    private ActionListener listener = new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            int index = buttons.indexOf(e.getSource());
            System.out.println("Number " + index + " pressed");         
        }
    };
    public NumberButtons() {
        JPanel pNum = new JPanel();
        pNum.setLayout(new GridLayout(3,4));
        for (int i = 0; i < 10; ++i) {
            JButton b = new JButton("" + i);
            b.addActionListener(listener);
            pNum.add(b);
            buttons.add(b);
        }
        this.add(pNum);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.pack();
    }   
}
1 голос
/ 02 ноября 2011

Просто свяжите ActionListener с вашей кнопкой и увеличивайте переменную каждый раз, когда вызывается actionPerformed callbak:

yourButton.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        variable++;
    }
});

Для получения более подробной информации вы можете прочитать официальную документацию

1 голос
/ 02 ноября 2011

Я предполагаю, что у вас есть класс, в котором есть кнопка, которую вы нажимаете. Заставьте этот класс реализовать интерфейс слушателя. Если я правильно помню, интерфейс - ActionListener, а метод - actionPerformed. В этом методе увеличьте счетчик для этой конкретной кнопки. Вы можете хранить числа в HashMap<JButton, Integer>, например.

0 голосов
/ 02 ноября 2011

Вот быстрый подкласс JButton, который делает то, что вы хотите. Да, это можно сделать без создания подклассов, но если вы хотите изменить поведение JButton (чтобы у него было дополнительное состояние, как в этом случае), подклассификация является хорошей альтернативой.

public class CountButton extends JButton implements ActionListener {
    private int count;

    CountButton() {
        super();
    }

    @Override
    public void actionPerformed(ActionEvent ae) {
        ++count;
    }

    public int getCount() {
        return count;
    }

} // CountButton class
...