public class RegisterFrame extends JFrame { JPanel p = null;
JLabel lblUsername = new JLabel(" 用户名 :");
JLabel lblPassWord1 = new JLabel("输入密码:");
JLabel lblPassWord2 = new JLabel("确认密码:");
JLabel nameCheck = new JLabel();
JLabel code1Check = new JLabel();
JLabel code2Check = new JLabel();
JTextField txtUsername = new JTextField(20);
JPasswordField txtPassWord1 = new JPasswordField(20);
JPasswordField txtPassWord2 = new JPasswordField(20);
JButton btnRegister = new JButton("注册");
public RegisterFrame(){
//添加面板背景
p = new JPanel(){
public void paintComponent(Graphics g) {
super.paintComponent(g);
//这里插入背景图片
p.setLayout(null);
lblUsername.setBounds(20,20,50,20);
p.add(lblUsername);
txtUsername.setBounds(80,20,100,20);
p.add(txtUsername);
nameCheck.setBounds(200,20,200,20);
p.add(nameCheck);
lblPassWord1.setBounds(20,40,60,20);
p.add(lblPassWord1);
txtPassWord1.setBounds(80,40,100,20);
p.add(txtPassWord1);
code1Check.setBounds(200,40,200,20);
p.add(code1Check); lblPassWord2.setBounds(20,60,60,20);
p.add(lblPassWord2);
txtPassWord2.setBounds(80,60,100,20);
p.add(txtPassWord2);
code2Check.setBounds(200,60,200,20);
p.add(code2Check); btnRegister.setBounds(60,80,60,20);
p.add(btnRegister);
}
};
txtUsername.addFocusListener(new NameCheckListener());
txtPassWord1.addFocusListener(new CodeCheckListener());
txtPassWord2.addFocusListener(new Code2CheckListener());
setTitle("注册平台");
//将窗体设置为当前系统风格
try{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
javax.swing.SwingUtilities.updateComponentTreeUI(this);
}catch(Exception e){
e.printStackTrace();
}
setSize(400,150);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
getContentPane().add(p);
setVisible(true);
} //姓名验证
class NameCheckListener extends FocusAdapter{
@Override
public void focusLost(FocusEvent e) {
String name = txtUsername.getText();
if(name.trim().equals("")){
nameCheck.setText("用户名不能为空");
}else{
if(name.equals("aaa")){//已被注册的用户名aaa
nameCheck.setText("用户名已被注册");
}else{
nameCheck.setText("√");
}
}
}
}
//密码1验证
class CodeCheckListener extends FocusAdapter{ @Override
public void focusLost(FocusEvent e) {
String code = txtPassWord1.getText();
if(code.trim().equals("")){
code1Check.setText("密码不能为空");
return;
}else{
code1Check.setText("√");
return;
}
}
}
//密码2验证
class Code2CheckListener extends FocusAdapter{ @Override
public void focusLost(FocusEvent e) {
String code1 = txtPassWord1.getText();
String code2 = txtPassWord2.getText();
if(code1.trim().equals("")){
code2Check.setText("请先输入初始密码");
return;
}
if(code2.trim().equals("")){
code2Check.setText("确认密码不能为空");
return;
}else{
if(code2.trim().equals((code1.trim()))){
code2Check.setText("√");
return;
}else{
code2Check.setText("确认密码输入错误");
return;
}
}
}
}
public static void main(String[] args) {
RegisterFrame rf = new RegisterFrame();
}
}
--------------------------------------------
当运行该程序时,输入完用户名将焦点转到密码框时,会执行完一轮所有的文本框,且以后选择焦点时,经常不按选择执行,这到底是什么原因啊!?拜托能详细说一下哪里出错了~
JLabel lblUsername = new JLabel(" 用户名 :");
JLabel lblPassWord1 = new JLabel("输入密码:");
JLabel lblPassWord2 = new JLabel("确认密码:");
JLabel nameCheck = new JLabel();
JLabel code1Check = new JLabel();
JLabel code2Check = new JLabel();
JTextField txtUsername = new JTextField(20);
JPasswordField txtPassWord1 = new JPasswordField(20);
JPasswordField txtPassWord2 = new JPasswordField(20);
JButton btnRegister = new JButton("注册");
public RegisterFrame(){
//添加面板背景
p = new JPanel(){
public void paintComponent(Graphics g) {
super.paintComponent(g);
//这里插入背景图片
p.setLayout(null);
lblUsername.setBounds(20,20,50,20);
p.add(lblUsername);
txtUsername.setBounds(80,20,100,20);
p.add(txtUsername);
nameCheck.setBounds(200,20,200,20);
p.add(nameCheck);
lblPassWord1.setBounds(20,40,60,20);
p.add(lblPassWord1);
txtPassWord1.setBounds(80,40,100,20);
p.add(txtPassWord1);
code1Check.setBounds(200,40,200,20);
p.add(code1Check); lblPassWord2.setBounds(20,60,60,20);
p.add(lblPassWord2);
txtPassWord2.setBounds(80,60,100,20);
p.add(txtPassWord2);
code2Check.setBounds(200,60,200,20);
p.add(code2Check); btnRegister.setBounds(60,80,60,20);
p.add(btnRegister);
}
};
txtUsername.addFocusListener(new NameCheckListener());
txtPassWord1.addFocusListener(new CodeCheckListener());
txtPassWord2.addFocusListener(new Code2CheckListener());
setTitle("注册平台");
//将窗体设置为当前系统风格
try{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
javax.swing.SwingUtilities.updateComponentTreeUI(this);
}catch(Exception e){
e.printStackTrace();
}
setSize(400,150);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
getContentPane().add(p);
setVisible(true);
} //姓名验证
class NameCheckListener extends FocusAdapter{
@Override
public void focusLost(FocusEvent e) {
String name = txtUsername.getText();
if(name.trim().equals("")){
nameCheck.setText("用户名不能为空");
}else{
if(name.equals("aaa")){//已被注册的用户名aaa
nameCheck.setText("用户名已被注册");
}else{
nameCheck.setText("√");
}
}
}
}
//密码1验证
class CodeCheckListener extends FocusAdapter{ @Override
public void focusLost(FocusEvent e) {
String code = txtPassWord1.getText();
if(code.trim().equals("")){
code1Check.setText("密码不能为空");
return;
}else{
code1Check.setText("√");
return;
}
}
}
//密码2验证
class Code2CheckListener extends FocusAdapter{ @Override
public void focusLost(FocusEvent e) {
String code1 = txtPassWord1.getText();
String code2 = txtPassWord2.getText();
if(code1.trim().equals("")){
code2Check.setText("请先输入初始密码");
return;
}
if(code2.trim().equals("")){
code2Check.setText("确认密码不能为空");
return;
}else{
if(code2.trim().equals((code1.trim()))){
code2Check.setText("√");
return;
}else{
code2Check.setText("确认密码输入错误");
return;
}
}
}
}
public static void main(String[] args) {
RegisterFrame rf = new RegisterFrame();
}
}
--------------------------------------------
当运行该程序时,输入完用户名将焦点转到密码框时,会执行完一轮所有的文本框,且以后选择焦点时,经常不按选择执行,这到底是什么原因啊!?拜托能详细说一下哪里出错了~
解决方案 »
- 关于引用
- JAR文件里某个类比如sash.class它还有一个sash$1.class是什么意思啊?
- 求一道简单的java输入输出题目
- 在字节数组中怎样用6个字节表示一个数啊
- java.lang.NoClassDefFoundError: javax/transaction/SystemException解决马上送分
- JTable如何用?
- 培植jcreator
- 菜鸟级的问题,介绍各种类和函数的文档
- 我看完了<think in java>(第2版)后,该学什么。请各为高手指点一下学习顺序。无比感谢!!!!!!!
- CSDN资深粉,请求组织点拨“项目优化”的一个“短连接改长连接”的故障点.
- url中的中文问题
- java的一个效率问题_数字转字符串
应该是这样的://添加面板背景
p = new JPanel(){
public void paintComponent(Graphics g) {
super.paintComponent(g);
//这里插入背景图片
}
};
p.setLayout(null);
lblUsername.setBounds(20,20,50,20);
p.add(lblUsername);
txtUsername.setBounds(80,20,100,20);
p.add(txtUsername);
nameCheck.setBounds(200,20,200,20);
p.add(nameCheck);
lblPassWord1.setBounds(20,40,60,20);
p.add(lblPassWord1);
txtPassWord1.setBounds(80,40,100,20);
p.add(txtPassWord1);
code1Check.setBounds(200,40,200,20);
p.add(code1Check);lblPassWord2.setBounds(20,60,60,20);
p.add(lblPassWord2);
txtPassWord2.setBounds(80,60,100,20);
p.add(txtPassWord2);
code2Check.setBounds(200,60,200,20);
p.add(code2Check);btnRegister.setBounds(60,80,60,20);
p.add(btnRegister);
code1Check.requestFocusInWindow(); //不离开密码输入框
拜托给我个解决方法吧!!!
Image background;
XPanel(Image image){
background = image;
setSize(image.getWidth(null),image.getHeight(null));
......
}
.....
@Override public void paintComponent(Graphics g){
.......
g.drawImage(image,0,0,null);
.......
}
}
图片加入Panel也要拿出来。
要知道paintComponent老是被调用。难道你图片总是在变吗?一般也就在创建Panel的时候变一下的吧。
我只是想要在拖拉边框时背景也跟着压缩,所以在paintComponent使用:
g.drawImage(bg1,0,0,this.getWidth(),this.getHeight(),this); 本想在方法外部使用布局管理器布置各组件,但布局管理器不能达到效果,所以就只能把组件按照这种方式lblUsername.setBounds((int)(this.getWidth()*540/951), (int)(this.getHeight()*100/452), (int)(this.getWidth()*55/951), (int)(this.getHeight()*20/452));
放在paintComponent中,随着边框拖动,不断刷新其在面板中的相对位置,结果很多监听事件都乱套了……随着边框拖动,不断刷新组件在面板中的相对位置<——有什么好方法?现在又纠结这个了~~~
public boolean verify(JComponent c){
...
}
});
如果真的没有你喜欢的布局器,那你可以在resize事件中做这种改变大小的事情(而不是在paintComponent事件中),如下 p.addComponentListener(new ComponentAdapter() {
public void componentResized(ComponentEvent e) {
int width = ((JPanel)e.getSource()).getWidth();
lblUsername.setBounds(width/10, 20, 50, 20);
}
});