 
 카톡
카톡
◎위챗 : speedseoul
 
                https://sites.google.com/site/drjohnbmatthews/keypad-panel
package gui;
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
import java.util.List;
import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.KeyStroke;
/**
 * A numeric key pad panel using <code>Action</code> with key bindings.
 * 
 * @author John B. Matthews; distribution per LGPL
 */
public class KeyPadPanel extends JPanel {
    private int maxDigits = 10;
    private final JTextArea text = new JTextArea(1, maxDigits);
    private final JButton clear = new JButton(new Clear("Clear"));
    private final JButton enter = new JButton(new Enter("Enter"));
    private final List<NumberButton> numbers = new ArrayList<NumberButton>();
    /**
     * Construct a numeric key pad that accepts up to ten digits.
     */
    public KeyPadPanel() {
        super(new BorderLayout());
        JPanel display = new JPanel();
        text.setFont(new Font("Dialog", Font.PLAIN, 24));
        text.setEditable(false);
        text.setFocusable(false);
        display.add(text);
        this.add(display, BorderLayout.NORTH);
        JPanel pad = new JPanel(new GridLayout(4, 3));
        for (int i = 0; i < 10; i++) {
            NumberButton n = new NumberButton(i);
            numbers.add(n);
            if (i > 0) {
                pad.add(n);
            }
        }
        pad.add(clear);
        clear.setFocusable(false);
        this.getInputMap().put(KeyStroke.getKeyStroke(
            KeyEvent.VK_CLEAR, 0), clear.getText());
        this.getActionMap().put(clear.getText(), new Click(clear));
        pad.add(numbers.get(0));
        pad.add(enter);
        enter.setFocusable(false);
        this.getInputMap().put(KeyStroke.getKeyStroke(
            KeyEvent.VK_ENTER, 0), enter.getText());
        this.getActionMap().put(enter.getText(), new Click(enter));
        this.add(pad, BorderLayout.CENTER);
    }
    /**
     * Construct a numeric key pad that accepts up to <code>maxDigits<code>.
     */
    public KeyPadPanel(int maxDigits) {
        this();
        this.maxDigits = maxDigits;
        this.text.setColumns(maxDigits);
    }
    private class Clear extends AbstractAction {
        public Clear(String name) {
            super(name);
        }
        @Override
        public void actionPerformed(ActionEvent e) {
            text.setText("");
            for (NumberButton n : numbers) {
                n.setEnabled(true);
            }
        }
    }
    private class Enter extends AbstractAction {
        public Enter(String name) {
            super(name);
        }
        @Override
        public void actionPerformed(ActionEvent e) {
            System.out.println("Entered: " + text.getText());
            clear.getAction().actionPerformed(e);
        }
    }
    private class Click extends AbstractAction {
        JButton button;
        public Click(JButton button) {
            this.button = button;
        }
        @Override
        public void actionPerformed(ActionEvent e) {
            button.doClick();
        }
    }
    /*
     * A numeric button with digit key bindings that appends to
     * <code>text<code>, accepting no more than <code>maxDigits<code>.
     */
    private class NumberButton extends JButton {
        public NumberButton(int number) {
            super(String.valueOf(number));
            this.setFocusable(false);
            this.setAction(new AbstractAction(this.getText()) {
                @Override
                public void actionPerformed(ActionEvent e) {
                    String cmd = e.getActionCommand();
                    if (text.getText().length() < maxDigits) {
                        text.append(cmd);
                    }
                    if (text.getText().length() == maxDigits) {
                        for (NumberButton n : numbers) {
                            n.setEnabled(false);
                        }
                    }
                }
            });
            KeyPadPanel.this.getInputMap().put(KeyStroke.getKeyStroke(
                KeyEvent.VK_0 + number, 0), this.getText());
            KeyPadPanel.this.getInputMap().put(KeyStroke.getKeyStroke(
                KeyEvent.VK_NUMPAD0 + number, 0), this.getText());
            KeyPadPanel.this.getActionMap().put(this.getText(), new Click(this));
        }
    }
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                JFrame f = new JFrame();
                f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                f.add(new KeyPadPanel(7));
                f.pack();
                f.setLocationRelativeTo(null);
                f.setVisible(true);
            }
        });
    }
}
Copyright:
©2011, John B. Matthews. Distribution permitted without warranty under the terms of the LGPL.
Last updated 27-Jun-2011