eclipse 如何在 Java 中创建屏幕键盘?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/13613075/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-19 19:30:45  来源:igfitidea点击:

How do I create an on screen keyboard in java?

javaeclipseswingjframejpanel

提问by Niklas Jensen

I'm working on a school project where we have to create a virtual smartphone, to run on a computer.

我正在做一个学校项目,我们必须创建一个虚拟智能手机,以便在计算机上运行。

My problem is that I need to create a keyboard on the screen (like on an smartphone), which you can then use by clicking with your mouse. I could just create every single JButton, but that will take a really long time. So I was hopping that someone knew some sort of algorithm that creates all the buttons and places them correctly on the screen.

我的问题是我需要在屏幕上创建一个键盘(就像在智能手机上一样),然后您可以通过用鼠标单击来使用它。我可以创建每一个JButton,但这需要很长时间。所以我希望有人知道某种算法可以创建所有按钮并将它们正确放置在屏幕上。

Thank you in advance :)

先感谢您 :)

回答by FThompson

You could construct the buttons through the use of for loops. One loop for every keyboard row is a plausible approach.

您可以通过使用 for 循环来构造按钮。每个键盘行一个循环是一种合理的方法。

String row1 = "1234567890";
String row2 = "qwertyuiop";
// and so forth
String[] rows = { row1, row2, .. };
for (int i = 0; i < rows.length; i++) {
    char[] keys = rows[i].toCharArray();
    for (int j = 0; i < keys.length; j++) {
        JButton button = new JButton(Character.toString(keys[j]));
        // add button
    }
}
// add special buttons like space bar

This could be done more elegantly through a more OOP approach, but this basic loop system will work.

这可以通过更多的 OOP 方法更优雅地完成,但这个基本的循环系统将起作用。

回答by Eng.Fouad

This simple example might help you:

这个简单的例子可能会帮助你:

enter image description here

在此处输入图片说明

import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;


@SuppressWarnings("serial")
public class MainFrame extends JFrame
{
    private JTextField txt;
    private PopUpKeyboard keyboard;

    public MainFrame()
    {
        super("pop-up keyboard");
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        txt = new JTextField(20);
        keyboard = new PopUpKeyboard(txt);

        txt.addMouseListener(new MouseAdapter()
        {
            @Override
            public void mouseClicked(MouseEvent e)
            {
                Point p = txt.getLocationOnScreen();
                p.y += 30;
                keyboard.setLocation(p);
                keyboard.setVisible(true);
            }
        });
        setLayout(new FlowLayout());
        add(txt);

        pack();
        setLocationByPlatform(true);
    }

    public static void main(String[] args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            @Override
            public void run()
            {
                new MainFrame().setVisible(true);
            }
        });
    }

    private class PopUpKeyboard extends JDialog implements ActionListener
    {
        private JTextField txt;

        public PopUpKeyboard(JTextField txt)
        {
            this.txt = txt;
            setLayout(new GridLayout(3, 3));
            for(int i = 1; i <= 9; i++) createButton(Integer.toString(i));
            pack();
        }

        private void createButton(String label)
        {
            JButton btn = new JButton(label);
            btn.addActionListener(this);
            btn.setFocusPainted(false);
            btn.setPreferredSize(new Dimension(100, 100));
            Font font = btn.getFont();
            float size = font.getSize() + 15.0f;
            btn.setFont(font.deriveFont(size));
            add(btn);
        }

        @Override
        public void actionPerformed(ActionEvent e)
        {
            String actionCommand = e.getActionCommand();
            txt.setText(txt.getText() + actionCommand);
        }
    }
}

回答by Ryan Fletcher

/**
 * @param args
 */
public static void main(String[] args) {
    // TODO Auto-generated method stub

    String alphabet = "abcdefghijklmnopqrstuvwxyz";

    JFrame myFrame = new JFrame();
    JPanel myPanel = new JPanel();

    for (int i = 0; i < alphabet.length(); i++) {

        myPanel.add(new JButton(alphabet.substring(i, i + 1)));
    }

    myFrame.add(myPanel);
    myFrame.pack();
    myFrame.setVisible(true);

}

This is a fast example of how to do it :).

这是如何做到这一点的快速示例:)。