我想创建一个具有JTextField的JDialog,这个对话框应该在用户刚刚启动时开始接收输入(即用户不必点击它)。我使用键击组合调用代码。如果任何其他应用程序正在运行,我想要弹出此对话框,我只需按下所需的键。但是目前,我必须在弹出时单击对话框因为目前正在运行的应用程序具有焦点.Anyhelp..Thanks
//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();
}
});
答案 0 :(得分:3)
几乎每行代码都不需要或顺序错误:
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
提示用户输入文本。本教程有工作示例。
答案 1 :(得分:1)
field = new JTextField(40);
f.addWindowListener( new WindowAdapter() {
public void windowOpened( WindowEvent e ){
field.requestFocus();
}
});
答案 2 :(得分:-1)
您的代码中没有显示文本字段。你只需要一个对话框...你需要帮助制作一个文本域吗? How to add components to JDialog
然后在创建文本字段后,使用textField.requestFocusInWindow()
选择它或查看此帖子以获取帮助,Java Textfield focus