Java 如何制作背景框';什么是JtextField?

Java 如何制作背景框';什么是JtextField?,java,swing,jframe,jdialog,Java,Swing,Jframe,Jdialog,我被一个问题困住了。我设计了一个带有两个文本框的简单的JFrame。在加载JFrame时,我还加载了VirtualKeyboard,它是JDialog表单。现在的问题是,框架和keybord都存在,但在JFrame中,我无法单击文本字段。如果我关闭键盘,我可以使用JFrame。打开键盘时,如何访问JFrame 当JFrame加载时,我调用JDialog,如下所示_ 这是我的JFrame: public class TestText extends javax.swing.JFrame { st

我被一个问题困住了。我设计了一个带有两个文本框的简单的
JFrame
。在加载JFrame时,我还加载了
VirtualKeyboard
,它是
JDialog
表单。现在的问题是,框架和keybord都存在,但在JFrame中,我无法单击文本字段。如果我关闭键盘,我可以使用
JFrame
。打开键盘时,如何访问
JFrame

JFrame
加载时,我调用
JDialog
,如下所示_

这是我的JFrame:

public class TestText extends javax.swing.JFrame {

static KeyBoard vk;

/**
 * Creates new form TestText
 */
public TestText() {
    initComponents();

    vk = new KeyBoard(new javax.swing.JFrame(), true);
}

public static void main(String args[]) {
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new TestText().setVisible(true);
             vk.setLocation(30,500);
            vk.setVisible(true);
        }
    });
}

private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JTextField jTextField1;
private javax.swing.JTextField jTextField2;

}
这是我的
VirtualKeybord
,它是一个JDialog:

public class KeyBoard extends javax.swing.JDialog {

/**
 * Creates new form KeyBoard
 */
public KeyBoard(java.awt.Frame parent, boolean modal) {
    super(parent, modal);
    setFocusableWindowState(false);
    setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
    initComponents();
}

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    if(evt.getSource()==jButton2)
    {
        try{
            Robot robot = new Robot(); 
            robot.keyPress(KeyEvent.VK_A); 
            }
            catch(Exception E){}
    }
} 
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
     if(evt.getSource()==jButton1)
    {
        try{
            Robot robot = new Robot(); 
            robot.keyPress(KeyEvent.VK_TAB); 
            }
            catch(Exception E){}
    }
}  
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;

我需要更改什么,才能使用文本字段同时访问键盘和JFrame?

问题是您将新的框架设置为键盘对话框的父级。 如果这样做,键盘将阻止jframe,直到它关闭。 有多种方法可以解决这个问题

1) 您可以将模态设置为false。这会告诉对话框不应阻止其父对象:

vk = new KeyBoard(new javax.swing.JFrame(), false);
2) 您可以使用null作为其父项初始化键盘,并单独启动帧:

public TestText() {
    initComponents();
    new javax.swing.JFrame();
    vk = new KeyBoard(null, true);
}
这将创建一个独立于键盘的新框架

3) 另一种方法是,如果您愿意,您的键盘知道在创建jframe之前必须将其添加到不同于父变量的变量中,如下所示:

public class KeyBoard extends javax.swing.JDialog {

    /**
     * Creates new form KeyBoard
     */
    public KeyBoard(java.awt.Frame parent, boolean modal) {
        super(null, modal);

        this.frame = parent;

        setFocusableWindowState(false);
        setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
        initComponents();
    }

    //Here are the other methods...

    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private java.awt.Frame frame;
}
vk = new KeyBoard(new javax.swing.JFrame(), false);
然后,您还可以创建一个新的解锁键盘,如下所示:

public class KeyBoard extends javax.swing.JDialog {

    /**
     * Creates new form KeyBoard
     */
    public KeyBoard(java.awt.Frame parent, boolean modal) {
        super(null, modal);

        this.frame = parent;

        setFocusableWindowState(false);
        setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
        initComponents();
    }

    //Here are the other methods...

    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private java.awt.Frame frame;
}
vk = new KeyBoard(new javax.swing.JFrame(), false);

不知道如何,在哪里,(为什么)代码是什么,@mKorbel对不起,我的英语很差,这段代码是用
JFrame
表单TestText编写的
vk
VirtualKeyboard
的对象,它是
JDialog
form.hmmm:-)我看不到您的描述,代码中的一些内容,看起来像是usnot整体的作业…,发布一个SSCCE/MCVE,简短,可运行,可编译,:-)该对话框可能是模态的,并且阻止您聚焦父窗口。我建议使用第一种方法,这更干净。非常感谢,我使用了第一种方法。