界面设计之swing实现软键盘
原理:
1、焦点控制,软件盘的组件需要设置为不可获取焦点
2、键盘事件模拟,使用Robot模拟按钮事件
3、使用JPopup作为弹出窗口的容器
?
?
import com.sun.glass.events.KeyEvent;import java.awt.AWTException;import java.awt.Robot;import java.awt.event.ActionEvent;import java.util.HashMap;import java.util.Map;import java.util.logging.Level;import java.util.logging.Logger;import javax.swing.AbstractAction;import javax.swing.Action;import javax.swing.JButton;import javax.swing.JFrame;/** * * @author joe */public class NumberInputPnl extends javax.swing.JPanel { private Map<String, Integer> keyCodeMap; private Robot robot; private Action clickAction = new AbstractAction() { public void actionPerformed(ActionEvent e) { JButton b = (JButton) e.getSource(); Integer code = keyCodeMap.get(b.getName()); if (code != null) { robot.keyPress(code); robot.keyRelease(code); } } }; /** * Creates new form NumberInputPnl */ public NumberInputPnl() { initComponents(); this.setFocusable(false); try { robot = new Robot(); } catch (AWTException ex) { Logger.getLogger(NumberInputPnl.class.getName()).log(Level.SEVERE, null, ex); } keyCodeMap = new HashMap<String, Integer>(); for (int i = 0; i < 10; i++) { keyCodeMap.put(String.valueOf(i), KeyEvent.VK_0 + i); } keyCodeMap.put("+", KeyEvent.VK_ADD); keyCodeMap.put("-", KeyEvent.VK_SUBTRACT); keyCodeMap.put(".", KeyEvent.VK_DECIMAL); keyCodeMap.put("<-", KeyEvent.VK_BACKSPACE); keyCodeMap.put("--", KeyEvent.VK_F3); keyCodeMap.put("++", KeyEvent.VK_F4); } public static void main(String[] args) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { JFrame f = new JFrame("二维码生成"); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.add(new NumberInputPnl()); f.pack(); f.setVisible(true); } }); } /** * This method is called from within the constructor to initialize the form. * WARNING: Do NOT modify this code. The content of this method is always * regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code"> private void initComponents() { _1btn = new javax.swing.JButton(); _2btn = new javax.swing.JButton(); _3btn = new javax.swing.JButton(); plusBtn = new javax.swing.JButton(); _4btn = new javax.swing.JButton(); _5btn = new javax.swing.JButton(); _6btn = new javax.swing.JButton(); substractBtn = new javax.swing.JButton(); _7btn = new javax.swing.JButton(); _8btn = new javax.swing.JButton(); _9btn = new javax.swing.JButton(); decimalBtn = new javax.swing.JButton(); _0btn = new javax.swing.JButton(); jButton14 = new javax.swing.JButton(); jButton15 = new javax.swing.JButton(); jButton16 = new javax.swing.JButton(); setLayout(new java.awt.GridLayout(4, 4)); _1btn.setAction(clickAction); _1btn.setFont(new java.awt.Font("宋体", 1, 30)); // NOI18N _1btn.setText("1"); _1btn.setFocusable(false); _1btn.setName("1"); // NOI18N add(_1btn); _2btn.setAction(clickAction); _2btn.setFont(new java.awt.Font("宋体", 1, 30)); // NOI18N _2btn.setText("2"); _2btn.setFocusable(false); _2btn.setName("2"); // NOI18N add(_2btn); _3btn.setAction(clickAction); _3btn.setFont(new java.awt.Font("宋体", 1, 30)); // NOI18N _3btn.setText("3"); _3btn.setFocusable(false); _3btn.setName("3"); // NOI18N add(_3btn); plusBtn.setAction(clickAction); plusBtn.setFont(new java.awt.Font("宋体", 1, 30)); // NOI18N plusBtn.setText("+"); plusBtn.setFocusable(false); plusBtn.setName("+"); // NOI18N add(plusBtn); _4btn.setAction(clickAction); _4btn.setFont(new java.awt.Font("宋体", 1, 30)); // NOI18N _4btn.setText("4"); _4btn.setFocusable(false); _4btn.setName("4"); // NOI18N add(_4btn); _5btn.setAction(clickAction); _5btn.setFont(new java.awt.Font("宋体", 1, 30)); // NOI18N _5btn.setText("5"); _5btn.setFocusable(false); _5btn.setName("5"); // NOI18N add(_5btn); _6btn.setAction(clickAction); _6btn.setFont(new java.awt.Font("宋体", 1, 30)); // NOI18N _6btn.setText("6"); _6btn.setFocusable(false); _6btn.setName("6"); // NOI18N add(_6btn); substractBtn.setAction(clickAction); substractBtn.setFont(new java.awt.Font("宋体", 1, 30)); // NOI18N substractBtn.setText("-"); substractBtn.setFocusable(false); substractBtn.setName("-"); // NOI18N add(substractBtn); _7btn.setAction(clickAction); _7btn.setFont(new java.awt.Font("宋体", 1, 30)); // NOI18N _7btn.setText("7"); _7btn.setFocusable(false); _7btn.setName("7"); // NOI18N add(_7btn); _8btn.setAction(clickAction); _8btn.setFont(new java.awt.Font("宋体", 1, 30)); // NOI18N _8btn.setText("8"); _8btn.setFocusable(false); _8btn.setName("8"); // NOI18N add(_8btn); _9btn.setAction(clickAction); _9btn.setFont(new java.awt.Font("宋体", 1, 30)); // NOI18N _9btn.setText("9"); _9btn.setFocusable(false); _9btn.setName("9"); // NOI18N add(_9btn); decimalBtn.setAction(clickAction); decimalBtn.setFont(new java.awt.Font("宋体", 1, 30)); // NOI18N decimalBtn.setText("."); decimalBtn.setFocusable(false); decimalBtn.setName("."); // NOI18N add(decimalBtn); _0btn.setAction(clickAction); _0btn.setFont(new java.awt.Font("宋体", 1, 30)); // NOI18N _0btn.setText("0"); _0btn.setFocusable(false); _0btn.setName("0"); // NOI18N add(_0btn); jButton14.setAction(clickAction); jButton14.setText("退格(<-)"); jButton14.setFocusable(false); jButton14.setName("<-"); // NOI18N add(jButton14); jButton15.setAction(clickAction); jButton15.setText("加数量"); jButton15.setFocusable(false); jButton15.setName("++"); // NOI18N add(jButton15); jButton16.setAction(clickAction); jButton16.setText("减数量"); jButton16.setFocusable(false); jButton16.setName("--"); // NOI18N add(jButton16); }// </editor-fold> // Variables declaration - do not modify private javax.swing.JButton _0btn; private javax.swing.JButton _1btn; private javax.swing.JButton _2btn; private javax.swing.JButton _3btn; private javax.swing.JButton _4btn; private javax.swing.JButton _5btn; private javax.swing.JButton _6btn; private javax.swing.JButton _7btn; private javax.swing.JButton _8btn; private javax.swing.JButton _9btn; private javax.swing.JButton decimalBtn; private javax.swing.JButton jButton14; private javax.swing.JButton jButton15; private javax.swing.JButton jButton16; private javax.swing.JButton plusBtn; private javax.swing.JButton substractBtn; // End of variables declaration }
??