2

我想创建一个屏幕键盘,这样当文本字段获得焦点时,键盘会出现在屏幕上,而当焦点丢失或在屏幕外单击时,键盘应该会消失。

这不是问题,问题是我不确定应该使用什么来创建这样的键盘。我不能使用 ajFrame因为如果我在键盘窗口外单击,那么键盘会进入后台并且不会关闭。我也不能使用jDialog,因为它不允许我们在窗口外点击。

我还希望能够显示一个文本框,其中包含键盘实时输入的内容(当我单击屏幕键盘上的键时,它应该出现在文本框中)。我在 netbeans 中做这个程序,所以如果你能记住这一点,那会很有帮助。

4

1 回答 1

2

我不确定我是否理解这里的要求,但看看这个例子是否能给你一些想法。

它的基本主旨是确保在可以变得可聚焦的组件周围有“空白”(在这个例子中是好的REDORANGE但我们不要对灰色阴影争论不休)。向其添加鼠标侦听器,并在事件时请求焦点(或者在您的情况下,隐藏键盘)。

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

public class ComponentFocus {

    ComponentFocus() {
        final JPanel gui = new JPanel(new GridLayout(0,1,15,15));
        gui.setFocusable(true);
        gui.addMouseListener(new MouseAdapter(){
            @Override 
            public void mouseClicked(MouseEvent me) {
                System.out.println(me);
                gui.requestFocus(true);
            }
        });
        gui.setBackground(Color.RED);
        gui.addFocusListener(new FocusAdapter(){
            @Override
            public void focusGained(FocusEvent fe) {
                gui.setBackground(Color.ORANGE);
            }

            @Override
            public void focusLost(FocusEvent fe) {
                gui.setBackground(Color.RED);
            }
        });

        JButton button1 = new JButton("button1");
        gui.add(button1);
        JButton button2 = new JButton("button2");
        gui.add(button2);

        JOptionPane.showMessageDialog(null, gui);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new ComponentFocus();
            }
        });
    }
}
于 2012-06-14T17:15:43.103 回答