2014-02-08 2 views
0

이것은 로그인 대화 상자를 생성하기위한 코드이지만 Enter 키를 누를 때 자동으로 로그인하려고합니다.이 코드는이 코드로 끝나지 않습니다. getRootPane().setDefaultButton(..); 시도했지만 JButton 개체가 없습니다.JOptionPane은 Enter 키로 기본 버튼을 설정합니다

 String _options = {"ok", "Exit"}; 

     JOptionPane pane = new JOptionPane(this, JOptionPane.PLAIN_MESSAGE, JOptionPane.DEFAULT_OPTION, null, _options, null); 
     JDialog dialog = pane.createDialog("Login"); 
     dialog.setAlwaysOnTop(true); 
     dialog.setVisible(true); 
     dialog.requestFocus(); 
     dialog.toFront(); 

기본 버튼을 설정하려고 생각하지만 JOptionpane에서 JButton 객체를 가져 오는 방법이 있습니까?

두 번째로 우리는

 JOptionPane pane = new JOptionPane(this, JOptionPane.PLAIN_MESSAGE, JOptionPane.DEFAULT_OPTION, null, _options, _options[0]); //set to _options[0] 

설정할 수 있지만, 여기에 문제는 "확인"버튼 이름에 포커스가 포커스없는 전송입니까? 어떻게이 문제를 해결할 수 있습니까?

답변

0

자신 만의 JDialog을 만들고 ActionListenerJPassword 필드에 추가 할 수 있습니다.

다음은 간단한 예입니다.

import java.awt.*; 
import java.awt.event.*; 
import java.util.Arrays; 
import javax.swing.*; 
import javax.swing.border.EmptyBorder; 

public class Password { 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable(){ 
      public void run() { 
       new PasswordDialog(); 
      } 
     }); 
    } 

    static class PasswordDialog extends JDialog { 
     public PasswordDialog() { 
      final JLabel label = new JLabel("Type: stackoverflow"); 
      final JPasswordField field = new JPasswordField(20); 
      final JLabel status = new JLabel(" "); 

      status.setForeground(Color.RED); 

      JPanel panel = new JPanel(new BorderLayout()); 
      panel.setBorder(new EmptyBorder(10, 10, 10, 10)); 
      panel.add(label, BorderLayout.NORTH); 
      panel.add(field, BorderLayout.CENTER); 
      panel.add(status, BorderLayout.SOUTH); 

      field.addActionListener(new ActionListener(){ 
       public void actionPerformed(ActionEvent e) { 
        if (Arrays.equals(field.getPassword(), "stackoverflow".toCharArray())) { 
         JOptionPane.showMessageDialog(PasswordDialog.this, "Correct Password"); 
        } else { 
         status.setText("Invalid Password"); 
        } 
       } 
      }); 

      add(panel); 
      pack(); 
      setLocationRelativeTo(null); 
      setVisible(true); 

      addWindowListener(new WindowAdapter(){ 
       public void windowClosing(WindowEvent e) { 
        System.exit(0); 
       } 
      }); 
     } 
    } 
} 
관련 문제