linux下PasswordField暂时无法输入

今天做练习时遇到的问题:

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/*@author HuangYangyang
 *@version  2012.11.15 
 * */
public class BankTest {
	JTextField userNameInput;
	JPasswordField userPasswordInput;
	JFrame loginFrame;
	JFrame userCenter;
	JTextField inputValue;
	int pwNumber;
	boolean accountLock;
	boolean accountError = true;
	boolean passwordError = true;
	boolean success;
	boolean exceptionB;
	boolean exceptionT;
	static final long TOP = 10000;
	long userDeposit =50000;
	public void setLoginGui(){
		loginFrame = new JFrame();
		loginFrame.setTitle("Bank Login");
		JLabel userNameLabel = new JLabel("  Account ");
		userNameInput = new JTextField(15);
		JLabel userPasswordLabel = new JLabel("Password");
		userPasswordInput = new JPasswordField(15);
                JButton loginSubmit = new JButton("submit");
		JButton loginClear = new JButton("reset");
		JPanel panel01 = new JPanel();
		panel01.add(new JLabel("Bank Login" ));
		JPanel panel02 = new JPanel();
		panel02.add(userNameLabel);
		panel02.add(userNameInput);
		JPanel panel03 = new JPanel();
		panel03.add(userPasswordLabel);
		panel03.add(userPasswordInput);
		JPanel panel04 = new JPanel();
		panel04.add(loginSubmit,BorderLayout.WEST);
		panel04.add(loginClear,BorderLayout.EAST);
		loginFrame.add(panel01,BorderLayout.NORTH);
		loginFrame.add(panel02);
		loginFrame.add(panel03);
		JPanel panel05 = new JPanel();
		panel05.add(panel02);
		panel05.add(panel03);
		loginFrame.add(panel04,BorderLayout.SOUTH);
		loginFrame.add(panel05,BorderLayout.CENTER);
		loginFrame.setLocationRelativeTo(null);  
		loginFrame.setSize(320,240);
		loginFrame.setVisible(true);
		loginSubmit.addActionListener(new SubmitAction());
		loginClear.addActionListener(new ClearAction());
	}
	class SubmitAction implements ActionListener{
		public void actionPerformed(ActionEvent event){
		checkUser();
		}
	}
	class ClearAction implements ActionListener{
		public void actionPerformed(ActionEvent event){
			userNameInput.setText("");
			userPasswordInput.setText("");
		}
	}
	private enum OutAccount{
		S10699371,SABER14192,WANGYU3
	}
	private enum OutPassword{
		S1419238911,s1419238912,SABERANIMEHTC3
	}
	public void checkUser(){
		String middlePassword = "";
		String middleUser = userNameInput.getText();
		char [] password = userPasswordInput.getPassword();
		for(char a : password){
			middlePassword =middlePassword + a;
		}
		String middleEnumUser = "";
		String middleEnumPassword = "";
		for(OutAccount a : OutAccount.values()){
			middleEnumUser = a.toString();
			if(middleEnumUser.equals(middleUser + middleEnumUser.charAt(middleEnumUser.length() - 1))){
				accountError = false;
				break;
			}
		}
		for(OutPassword a : OutPassword.values()){
			middleEnumPassword = a.toString();
			if(middleEnumPassword.equals(middlePassword + middleEnumPassword.charAt(middleEnumPassword.length() - 1))){
				passwordError = false;
				break;
			}
		}
		if(accountError == false & passwordError == false & middleEnumPassword.charAt(middleEnumPassword.length() - 1) == middleEnumUser.charAt(middleEnumUser.length() - 1)){
			loginFrame.dispose();
			setBankCenterGui();
		}
		else if(accountError == true){
			JOptionPane.showMessageDialog(null, "Account error!");
			userNameInput.setText("");
			userPasswordInput.setText("");
		}
		else if(accountError == false & passwordError == true){
			if(pwNumber == 3){
				JOptionPane.showMessageDialog(null,"Account locked!");
				loginFrame.dispose();
			}
			else{
			JOptionPane.showMessageDialog(null,"Password error! Pealse check password!");
			userPasswordInput.setText("");
			pwNumber = pwNumber + 1;
		}
		}
		else{
			JOptionPane.showMessageDialog(null,"Account or Password error!");
			userNameInput.setText("");
			userPasswordInput.setText("");
		}
	}
	private void setBankCenterGui() {
		userCenter = new JFrame("Bank Center");
		JPanel panel01 = new JPanel();
		panel01.add(new JLabel("Bank Center"));
		JPanel panel02 = new JPanel();
		inputValue = new JTextField(5);
		panel02.add(inputValue);
		JButton outputDeposit = new JButton("Withdrawal");
		panel02.add(outputDeposit);
		JButton inputDeposit = new JButton("  Deposit  ");
		panel02.add(inputDeposit);
		userCenter.add(BorderLayout.NORTH,panel01);
		userCenter.add(BorderLayout.CENTER,panel02);
		outputDeposit.addActionListener(new InputDepositAction());
		inputDeposit.addActionListener(new OutputDepositAction());
		userCenter.setLocationRelativeTo(null);
		userCenter.setSize(350,200);
		userCenter.setVisible(true);
	}
	class OutputDepositAction implements ActionListener{
		public void actionPerformed(ActionEvent event){
			setOutput();
			JOptionPane.showMessageDialog(null,"Deposit success!");
			inputValue.setText("");
		}
	}
	class InputDepositAction implements ActionListener{
		public void actionPerformed(ActionEvent event){
			try {
				setInput();
			} catch (BalanceLackException e) {
				e.printStackTrace();
			} catch (OverTopException e) {
				e.printStackTrace();
			}
			finally{
				if(success){
					JOptionPane.showMessageDialog(null,"Withdrawal success!");
					success = false;
					inputValue.setText("");
				}
				else{
					JOptionPane.showMessageDialog(null,"Withdrawal failed!");
					if(exceptionB){
						BalanceLackException.tip();
					}
					else if(exceptionT){
						OverTopException.tip();
					}
					inputValue.setText("");
				}
			}
		}
	}
	public void setOutput(){
		long middleValue = Long.parseLong(inputValue.getText());
		userDeposit = userDeposit + middleValue;
		JOptionPane.showMessageDialog(null,"Deposit success !");
	}
	public void setInput() throws BalanceLackException , OverTopException{
		long middleValue = Long.parseLong(inputValue.getText());
		if(userDeposit - middleValue < 0 )
			exceptionB = true;
		if(Long.parseLong(inputValue.getText()) > 30000)
			exceptionT = true;
		if(userDeposit - middleValue > 0 & Long.parseLong(inputValue.getText()) < 30000 ){
		userDeposit = userDeposit - middleValue;
		success = true;
		}
	}
	public static void main(String [] args){
		BankTest go = new BankTest();
		go.setLoginGui();
		
	}
}

       linux下PasswordField无法输入,只有把光标从密码框移开,让密码框重新获得焦点,可以输入了。一开始以为是java的bug。后来知道是因为PasswordField组件默认不获取系统输入法支持,需要自己设置。

     加入 userPasswordInput.enableInputMethods(true);     运行程序ok,可以输入了。


     详见文档说明:

         By default, JPasswordField disables input methods; otherwise, input characters could be visible while they were composed using input methods. If an application needs the input methods support, please use the inherited method, enableInputMethods(true).

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值