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

发布于 2024-10-02 00:31:55 字数 1727 浏览 3 评论 0原文

我正在开发一个java键盘,它将用于在两个JTextField(x和y)中输入数据。一旦用户单击“Enter”,它应该评估 x 和 y 的差异。我是否必须为每个按钮添加一堆actionListener?有没有一种有效的方法来做到这一点。

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

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);


        }

        }

I am working on a keypad on java that will be used to input data in two JTextField (x & y). And Once the user clicks "Enter", It should evaluate the difference of x and y. Do I have to add bunch of actionListeners for each button?? Is there an efficient way to do it.

So far on my code, I have all the buttons I need, but instead of using my keyboard, I want to use the virtual keypad instead to enter the numbers (technically, a String). Any suggestions?

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);


        }

        }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

云柯 2024-10-09 00:31:55

我会制作一个像这样的按钮数组:

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

然后当事件触发时检查其来源。

I'd make an array of buttons like this:

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

and then when the event fires check for its origin.

后来的我们 2024-10-09 00:31:55
   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);
      }
   }
   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);
      }
   }
云淡月浅 2024-10-09 00:31:55

有两件事:

首先,您可以只使用一个 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)< /代码>。请查看此处的 Oracle 教程,了解如何使用它们。

Two things:

first you can use just one ActionListener, just take care to add it to all buttons and then you can do something like:

  public void actionPerformed(ActionEvent e)
  {
     JButton currentButton = (JButton)e.getSource();
     int number = currentButton.getText().charAt(0) - '0';

     // do whatever with the number
  }

secondly you can use a KeyListener to catch the keystrokes pressed while your keypad is focused, that listener has three methods: keyPressed(KeyEvent e), keyReleased(KeyEvent e) and keyTyped(KeyEvent e). Take a look at oracle tutorial here to learn how to use them.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文