代码之家  ›  专栏  ›  技术社区  ›  razshan

如何在java上制作一个简单的键盘来高效地输入JTextFields?

  •  0
  • razshan  · 技术社区  · 15 年前

    我正在用java开发一个小键盘,用于在两个JTextField(x&y)中输入数据。一旦用户单击“Enter”,它就应该计算x和y的差异。我是否必须为每个按钮添加一组actionListeners?有没有一种有效的方法。

    到目前为止,我的代码中已经有了所有需要的按钮,但是我不想使用键盘,而是想使用虚拟键盘来输入数字(技术上来说,是字符串)。有什么建议吗?

    import javax.swing.*;
    import java.awt.*;
    
    public class EmbeddedMain extends JFrame
    {
    
        public static void main (String[] args)
            {
            EmbeddedMain em = new EmbeddedMain();
            }
    
    
        public EmbeddedMain()
        {
            setTitle("testing");
            setSize(450,350);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setLocationRelativeTo(null);
            setLayout(new GridLayout(4,5,3,3));
    
        JButton button1= new JButton("7");
        JButton button2= new JButton("8");
        JButton button3= new JButton("9");
        JButton button4= new JButton("4");
        JButton button5= new JButton("5");
        JButton button6= new JButton("6");
        JButton button7= new JButton("1");
        JButton button8= new JButton("2");
        JButton button9= new JButton("3");
        JButton button0= new JButton("0");
        JButton buttonR= new JButton("Reset");
        JButton buttonE= new JButton("Enter");
    
         JTextField x = new JTextField("      ");
         JTextField y = new JTextField("      ");
         JTextField CPP_entry = new JTextField("    ");
    
       CPP_entry.setEditable(false);        
    
        add(button1);
        add(button2);
        add(button3);
        add(new JLabel("    x:")); 
        add(x); 
        add(button4);
        add(button5);
        add(button6);
        add(new JLabel("    y:")); 
        add(y); 
        add(button7);
        add(button8);
        add(button9);
        add(new JLabel("    x-y:")); 
        add(CPP_entry); 
        add(buttonR);
        add(button0);
        add(buttonE);
    
            setVisible(true);
    
    
            }
    
            }
    
    3 回复  |  直到 15 年前
        1
  •  0
  •   Jack    15 年前

    两件事:

    首先你可以只用一个 ActionListener

      public void actionPerformed(ActionEvent e)
      {
         JButton currentButton = (JButton)e.getSource();
         int number = currentButton.getText().charAt(0) - '0';
    
         // do whatever with the number
      }
    

    其次你可以用 KeyListener 要捕捉键盘聚焦时按下的按键,该侦听器有三种方法: keyPressed(KeyEvent e) keyReleased(KeyEvent e) keyTyped(KeyEvent e) here 学习如何使用它们。

        2
  •  1
  •   deorst    15 年前

    我会做一系列这样的按钮:

    JButton[] buttonArray = new JButton[10];
    for(int i = 0; i < buttonArray.length; i++ ) {
      buttonArray[i] = new JButton(String.valueOf(i));
      buttonArray[i].addActionListener(yourActionListener);
    }
    

        3
  •  1
  •   Peter R. Bondam    13 年前
       import javax.swing.*;
       import java.awt.event.*;
       import java.awt.*;
    
       public class EmbeddedMain extends JFrame implements ActionListener 
       {
          private JTextField[] tfld = new JTextField[4];// x,y,z;
          private String sigma = " "+(char)0x2211;
          private String[] str = {"X=","Y=","Z=",sigma+"="};
          private String[] txt = {
             "7",     "8",    "9",     
             "4",     "5",    "6",    
             "1",     "2",    "3",    
             "Reset", "0",  "Enter"};
          private JButton[] but = new JButton[12];
    
          public static void main (String[] args)
          {
             EmbeddedMain em = new EmbeddedMain();
          }
    
          public EmbeddedMain() //constructor begins, method for embedded main class
          {
             setTitle("Subtraction");
             setSize(420,350);
             setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
             setLocationRelativeTo(null);
    
             setLayout(new FlowLayout());
             JPanel copa = (JPanel)getContentPane();
             copa.setPreferredSize(dim(3*70+140+5*5, 4*70+5*5));
             copa.setBackground(new Color(100,255,100));
    
             for (int i = 0, j = 0, k = 1; i < but.length; i++, k++) {
                but[i] = new JButton(txt[i]);
                but[i].setPreferredSize(dim(70,70));
                but[i].setFont(new Font("default",0,18));
                but[i].setMargin(new Insets(0,0,0,0));
                but[i].addActionListener(this);
                but[i].setName(""+i);
                add(but[i]);
    
                if (k%3 == 0) {
                   tfld[j]  = new JTextField(str[j]); 
                   tfld[j].setPreferredSize(dim(140,70));
                   add(tfld[j++]);
                }   
             }
             pack();
             setVisible(true);
          }
    
          public void actionPerformed(ActionEvent e)
          {
             Object src = e.getSource();
             if (src instanceof JButton) {
                JButton but = (JButton)src;
                String nm = but.getName();
                int nr = Integer.parseInt(nm)/3;
                String txt = but.getText();
                if (txt.equalsIgnoreCase("reset")) {
                   for (int j = 0; j < tfld.length; j++)
                      tfld[j].setText(str[j]);
                }
    
                else if (txt.equalsIgnoreCase("enter")) {
                }
    
                else
                   tfld[0].setText(tfld[0].getText() + txt);
             }  
          }
    
          public Dimension dim(int w, int h) {
             return new Dimension(w,h);
          }
       }
    
    推荐文章