JApplet & KeyListener

后端 未结 2 408
时光说笑
时光说笑 2021-01-21 06:40

I\'m developing an application for my computer science classes. The task is to write a calculator but without using JTextFields or JTextArea<

2条回答
  •  爱一瞬间的悲伤
    2021-01-21 07:35

    I took the liberty of converting @David's helpful example to use a label and the numeric keypad.

    Update: This hybrid works on Ubuntu/OpenJDK, and it can be deployed via Java Web Start.

    import java.awt.BorderLayout;
    import java.awt.Container;
    import java.awt.EventQueue;
    import java.awt.event.*;
    import javax.swing.*;
    
    /**
     * @see https://stackoverflow.com/a/13363349/230513
     */
    public class BinaryCalc extends JApplet {
    
        private static BinaryCalc bc = new BinaryCalc();
        private JLabel label = new JLabel("0000000000");
    
        public static void main(String[] args) {
            EventQueue.invokeLater(new Runnable() {
    
                @Override
                public void run() {
                    JFrame frame = new JFrame();
                    frame.setTitle("BinaryCalc");
                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    initContainer(frame);
                    frame.pack();
                    bc.label.setText("");
                    frame.setVisible(true);
                }
            });
        }
    
        // Common initialization for either JApplet or JFrame
        private static void initContainer(Container container) {
            JPanel panel = new JPanel();
            bc.setKeyBindings(panel);
            panel.add(bc.label);
            container.add(panel, BorderLayout.CENTER);
            panel.requestFocusInWindow();
        }
    
        @Override
        public void init() {
            SwingUtilities.invokeLater(new Runnable() {
    
                @Override
                public void run() {
                    initContainer(BinaryCalc.this);
                }
            });
        }
    
        private void setKeyBindings(final JPanel panel) {
            panel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW)
                .put(KeyStroke.getKeyStroke(KeyEvent.VK_0, 0), "0");
            panel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW)
                .put(KeyStroke.getKeyStroke(KeyEvent.VK_NUMPAD0, 0), "0");
            panel.getActionMap().put("0", new AbstractAction() {
    
                @Override
                public void actionPerformed(ActionEvent ae) {
                    String tmp = label.getText();
                    label.setText(tmp + "0");
                }
            });
            panel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW)
                .put(KeyStroke.getKeyStroke(KeyEvent.VK_1, 0), "1");
            panel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW)
                .put(KeyStroke.getKeyStroke(KeyEvent.VK_NUMPAD1, 0), "1");
            panel.getActionMap().put("1", new AbstractAction() {
    
                @Override
                public void actionPerformed(ActionEvent ae) {
                    String tmp = label.getText();
                    label.setText(tmp + "1");
                }
            });
        }
    }
    

提交回复
热议问题