JtextField对话框.不需要点击开始输入



我想创建一个JDialog,它有一个JTextField,这个对话框应该开始从用户输入,而不是它开始(1)。(无需用户点击它)。我正在使用按键组合调用代码。因此,如果任何其他应用程序正在运行,我想弹出这个对话框,我只需按下所需的键。然而目前,我必须点击对话框,当它弹出,因为目前运行的应用程序有焦点。任何帮助..谢谢

  //Creating a panel
    JPanel panel = new JPanel( new SpringLayout() );
    //creating a text field
    final JTextField textfield = new JTextField(65);

    // Modifying text field
    Font font = new Font("SansSerif",Font.LAYOUT_LEFT_TO_RIGHT, 19);
    textfield.setFont(font);
    textfield.setForeground(Color.black);
    textfield.setBackground(new Color(200,200,200,70)); //253,245,230
    //border
    textfield.setBorder(new BevelBorder(BevelBorder.LOWERED));
    textfield.requestFocusInWindow();

    //modifying panel
    label.setLabelFor(textfield);
    panel.add(textfield);
    panel.setBackground(new Color(0,0,0,25)); 
    panel.setPreferredSize(new Dimension(750,70));
    panel.setBorder(new EtchedBorder(EtchedBorder.RAISED));

    //Lay out the panel.
    SpringUtilities.makeCompactGrid(panel,
                                    1 , 2, //rows, cols
                                    10, 10,        //initX, initY
                                    10, 10);       //xPad, yPad

    //Create and set up the Window Frame
    final JDialog frame = new JDialog();
    frame.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);

    //Positioning the dialog at the center of screen
    Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
    frame.setLocation(dim.width/4-frame.getSize().width/4, dim.height/3-frame.getSize().height/3);
    //Set up the content pane.
    //adding background

    frame.setLayout(new SpringLayout());
    frame.setUndecorated(true);
    frame.add(panel);       
    frame.setSize(750,71); 
    frame.repaint();

    java.awt.EventQueue.invokeLater(new Runnable() {
        @Override
        public void run() {
            frame.toFront();                 
            frame.setAlwaysOnTop(true);
            frame.repaint();
            frame.setVisible(true);
        }
    });
    frame.addWindowFocusListener( new WindowAdapter() {
        public void windowOpened( WindowEvent e ){
            frame.requestFocus();
        }
    }); 

几乎每一行代码都是不必要的,或者顺序错误:

frame.pack();
frame.setSize(750,71); 

好吧,下定决心,你打算做什么?pack()方法用于让框架根据添加到框架中的组件自动计算大小。setSize()将覆盖pack()方法的结果。只有在将所有组件添加到框架后才能打包()框架。

frame.repaint();

不需要repaint(), setVisible(true)方法将确保框架被绘制。

frame.requestFocus();

不需要,当帧设置为可见时,焦点将自动转到第一个组件。

所以你代码的基本顺序应该是这样的:
JTextField textField = new JTextField(20);
JFrame frame = new JFrame(...);
frame.add(textField, BorderLayout.PAGE_START);
frame.pack();
frame.setVisible(true);

不需要请求文本字段的焦点。焦点将自动放在第一个组件上。

您可能还想看看Swing教程中关于如何创建对话框的内容。您可以使用JOptionPane来提示用户进行文本输入。

field = new JTextField(40);
f.addWindowListener( new WindowAdapter() {
    public void windowOpened( WindowEvent e ){
        field.requestFocus();
    }
}); 

你在这儿干什么?

您的代码中没有显示文本字段。你有的只是一个对话框……您需要帮助制作文本框吗?如何向JDialog中添加组件

创建文本字段后,使用textField.requestFocusInWindow()

或者看看这篇文章的帮助,Java Textfield的焦点

最新更新