2012-08-29 64 views
1

所以我工作的一個項目,我試圖禁用從程序框架和場,以便只有窗口前的這一個是這裏活躍的 是我的代碼:如何禁用文本框?

import javax.swing.*; 
import java.awt.event.*; 
import java.awt.*; 

public class password 
{ 
    private static String password = "pass"; 
    public static void main(String[]args) { 
    JFrame frame = new JFrame("Password"); 
    frame.setVisible(true); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setSize(400,100); 
    JLabel label = new JLabel("Enter password"); 
    JPanel panel = new JPanel(); 
    frame.add(panel); 
    JPasswordField pass = new JPasswordField(10); 
    pass.setEchoChar('*'); 
    pass.addActionListener(new AL()); 
    panel.add(label, BorderLayout.WEST); 
    panel.add(pass, BorderLayout.WEST); 
} 
static class AL implements ActionListener 
{ 
    public void actionPerformed(ActionEvent e) { 
     JPasswordField input = (JPasswordField) e.getSource(); 
     char [] passy = input.getPassword(); 
     String p = new String(passy); 
     if (p.equals(password)){ 
      JOptionPane.showMessageDialog(null, "Correct"); 
      System.out.print("Welcome to Adam's Quirky program."); 



     } 
     else 
      JOptionPane.showMessageDialog(null, "Incorrect"); 
     } 
    } 
} 

程序我目前使用的程序是Eclipse。

+2

從'的char []創建一個''String'您從'JPasswordField'得到[失敗的目的(http://stackoverflow.com/問題/ 8881291 /爲什麼 - 是 - 炭首選,超弦換密碼)。 – Jeffrey

+1

只需幾個註釋:1)類的命名以大寫字母開頭。 2)不要在後面調用setSize(),call pack()方法(和setVisible(true)),最後調用你的框架方法。 (我告訴你這是因爲我犯了同樣的錯誤)。 3)你的Border Layout沒有用處,因爲你根本沒有調用panel.setLayout()方法。 –

回答

4

我會看看模態對話框。

要麼使用JOptionPane要麼滾動自己的。

如果這些都不滿足您的需求,儘量考慮看看JLayer(Java 7中)或JXLayer(Java 6中及以下)

看一看LockableUI(這是過時了一點,但基本思路是一樣的)

如果不上訴,你可以使用一個「堵玻璃面板」

看看

一些例子

+1

歡迎> 10k用戶 – mKorbel