用JOptionPane弹出对话框后,总是有焦点的,按回车就能让该对话框消失。
面临的问题是:录入人员在小键盘上打数字和回车来录入数据,当打错的时候弹出一个对话框来提示错误,但此时录入员没有抬头看而是一直录下去,这样就录错了。
我想让JOptionPane显示时焦点不在按钮上,这样不管录入员继续输什么都不会进行下去了。请问大家该怎样实现这种效果?

解决方案 »

  1.   

    setFocus?
    楼上能给出具体代码吗?谢谢。
      

  2.   

    无法从JOptionPane中抢回焦点。
    重写JDialog,模拟JOptionPane界面,此时可以调用背面Container的setfocus()函数或者tofront()使得焦点仍在背面的container上
      

  3.   

    谢谢崆流。我看了BasicOptionPaneUI.java,的确不好控制。自己写了一个对话框,凑合着先用。package util.gui.dlg;import javax.swing.*;
    import java.awt.*;public class MessageDialog extends JDialog
    {
    private static MessageDialog dlg = null;
    public static void showMessageDialog( Frame owner , String info )
    {
    if( dlg == null )
        {
         dlg = new MessageDialog( owner , info );
        }
        else
        {
        dlg.setInfo( info );     
        }
        
        dlg.setVisible( true );
    }

    public MessageDialog( Frame owner , String info )
    {
    super( (Frame)owner , "信息窗口" );
    lbl = new JLabel( info );
    getContentPane().add( lbl );
    pack();

    Toolkit tk = Toolkit.getDefaultToolkit();
    Dimension d = tk.getScreenSize();
    int height = new Double( d.getHeight()/2 - getHeight()/2 ).intValue();
    int width = new Double( d.getWidth()/2  - getWidth()/2 ).intValue();
    setBounds( width , height , 160 , 80 );
    this.setModal( true );
    }

    public void setInfo( String info )
    {
    lbl.setText( info );
    }
    JLabel lbl = null;

    public static void main( String[] args )
        {
         JFrame f = new JFrame();
         f.setSize( 640 , 480 );
         f.setVisible( true );
         MessageDialog.showMessageDialog( f , "warning!!!" );
        }
    }