当前位置: 代码迷 >> J2SE >> 在JTextField中获取,点击按钮,在另一个JTextField中显示解决思路
  详细解决方案

在JTextField中获取,点击按钮,在另一个JTextField中显示解决思路

热度:225   发布时间:2016-04-23 19:48:14.0
在JTextField中获取,点击按钮,在另一个JTextField中显示
以下是我的代码。。。

我想分别在用户名和密码的文本框中输入文字后,点击确定,然后在最下边的两个文本框中分别显示
可是现在文本框不分别显示啊。。。

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

public class Window extends JFrame{
JFrame f=new JFrame("注册");
JButton b1=new JButton("确定");
JButton b2=new JButton("取消");
JLabel T1=new JLabel("用户名:",JLabel.CENTER);      //.getText
JLabel T2=new JLabel("密  码:",JLabel.CENTER);
JTextField L1=new JTextField();
JTextField L2=new JTextField();
JTextField L3=new JTextField();
JTextField L4=new JTextField();
Font F=new Font("宋体",Font.PLAIN,22);
Font F1=new Font("仿宋",Font.PLAIN,20);
public Window(){
Container c=getContentPane();
c.setLayout(new GridLayout(4,2,20,20));
        c.add(T1);
c.add(L1);
c.add(T2);
c.add(L2);
c.add(L3);
c.add(L4);
c.add(b1);
c.add(b2);
T1.setFont(F);
T2.setFont(F);
b1.setFont(F1);
b2.setFont(F1);
setSize(240,260);
setLocation(490,150);
setVisible(true);
b1.addActionListener(new ButtonHandler());

public static void main(String[] args) {
Window duixiang=new Window();
}
}
class ButtonHandler implements ActionListener{
public void actionPerformed(ActionEvent e){
Window target=new Window();
String str = target.L1.getText();
target.L3.setText(str);

}
}
------解决思路----------------------
你在类ButtonHandler中new了一个Window类的对象,这个对象跟原来的窗口没关系啊,所以,显示不出来。下面是我修改了的,你做个参考。


import java.awt.Container;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

//建议别用Window,起个其他有含义的名字,免得跟人家原有的Window类看着混淆
//这里我直接实现了ActionListener接口,这样,获取当前对象引用方便些,也可以用
//匿名内部类,你那样做也行,不过,需要把当前对象作为参数传过去
public class Window extends JFrame implements ActionListener {
JFrame f = new JFrame("注册");
JButton b1 = new JButton("确定");
JButton b2 = new JButton("取消");
JLabel T1 = new JLabel("用户名:", JLabel.CENTER); // .getText
JLabel T2 = new JLabel("密  码:", JLabel.CENTER);
JTextField L1 = new JTextField();
JTextField L2 = new JTextField();
JTextField L3 = new JTextField();
JTextField L4 = new JTextField();
Font F = new Font("宋体", Font.PLAIN, 22);
Font F1 = new Font("仿宋", Font.PLAIN, 20);

public Window() {
//设置下点右上角的关闭按钮使程序退出,调试方便些
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//这两句是从下面提上来的,也是个人习惯而已
setSize(240, 260);
setLocation(490, 150);

Container c = getContentPane();
c.setLayout(new GridLayout(4, 2, 20, 20));
c.add(T1);
c.add(L1);
c.add(T2);
c.add(L2);
c.add(L3);
c.add(L4);
c.add(b1);
c.add(b2);
T1.setFont(F);
T2.setFont(F);
b1.setFont(F1);
b2.setFont(F1);
//这里把事件监听注册给Window类了
b1.addActionListener(this);
}

public static void main(String[] args) {
//我把显示代码提出来了,个人习惯,觉得控制更
//方便,因为有时new了窗口但是并不马上显示
new Window().setVisible(true);
}

//把响应按钮操作的类改成由当前类实现接口了
@Override
public void actionPerformed(ActionEvent e) {
//这是你要的在下面分别显示
this.L3.setText(this.L1.getText());
this.L4.setText(this.L2.getText());
}
}