java - 带有 JtextField 的 JDialog 框..无需单击即可开始输入。!

标签 java swing jtextfield

我想创建一个具有 JTextField 的 JDialog,该对话框应该在启动后立即开始接受用户的输入(即用户不必单击它)。我使用按键组合调用代码。因此,如果任何其他应用程序正在运行并且我想弹出此对话框,我只需按所需的键即可。但是目前,我必须在弹出对话框时单击该对话框因为当前正在运行的应用程序具有焦点。任何帮助..谢谢

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

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

您可能还想查看 How to Make Dialogs 上的 Swing 教程。 。您可以使用 JOptionPane 提示用户输入文本。本教程有工作示例。

关于java - 带有 JtextField 的 JDialog 框..无需单击即可开始输入。!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32789599/

相关文章:

java - 如何在 OpenScript - Oracle Application Testing Suite 中传递运行时参数?

java - 通过 ajax 包含动态内容的更好方法是什么?

java - Java 中的 Final 关键字允许更改方法

java - 如何将 JTextField 中的用户输入放入另一个方法中

java - JFrame 标题到文本文件标题

java - 在java swing中的一个按钮上执行多个操作

java - JLabel - 在鼠标输入时更改为 JTextField

java - 使用 for 循环在 jTextFields 中设置值

java - 使用 Java Swings 和 mysql 自动填充表单

java - 为什么Java的System.getSystemProperty ("os.name")错误?