必须使用jtextfield从另一个类访问switchcase语句

时间:2011-12-20 07:20:56

标签: java swing

在下面的代码部分中,我创建了两个类。第一类用于设计,我保留了两个jtextfields,一个用于获取String值,另一个用于获取数值。第二类是描述字符串和数字的函数,以显示jtextfield中的值。我不能在类文本字段中访问字符串参数。

如果我将使用此代码,它将访问每个jtextfield中的两个函数。请为此问题提供解决方案。

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

public class valid implements KeyListener {
    perform1 per1=new perform1();
    String num1="Alpha";
    String num2="Numeric";
    String num3="Alphanumeric";
    JFrame fr=new JFrame();
    JPanel jp=new JPanel();
    JLabel label1=new JLabel("STUDENT NAME");
    JLabel label2=new JLabel("REG NO");
    JTextField text1=new JTextField(15);
    JTextField text2=new JTextField(15);
    public valid(){
        text1.addKeyListener(this);
        text2.addKeyListener(this);
        jp.add(label1);
        jp.add(text1);
        jp.add(label2);
        jp.add(text2);
        fr.add(jp);
        fr.setSize(450, 330);
        fr.setVisible(true);
    }

    public void keyTyped(KeyEvent e) {

    }

    public void keyPressed(KeyEvent e) {

    }

    public void keyReleased(KeyEvent e) {
        per1.dis(text1, e, num1);
        per1.dis(text2, e, num2);
    }
    public static void main(String ar[])
    {
        new valid();
    }

}
class perform1{
    public void dis(JTextField PTxtCtrl,KeyEvent PKeyvalue,String PTempStr){
        JLabel error=new JLabel();
        String TmpCurntStr;
        String TmpConvStr;
        value val = value.valueOf(PTempStr);

        switch(val){
            case Alpha:
                if(PKeyvalue.getKeyChar()>='a'&& PKeyvalue.getKeyChar()<='z'){
                    TmpCurntStr=PTxtCtrl.getText();
                    TmpConvStr=TmpCurntStr.toUpperCase();
                    PTxtCtrl.setText(TmpConvStr);
                   }else{
                    JOptionPane.showMessageDialog(error,"Enter only alpha");
                }

                break;
            case Numeric:
                if(PKeyvalue.getKeyChar()>='0'&& PKeyvalue.getKeyChar()<='9'){
                    TmpCurntStr=PTxtCtrl.getText();
                    System.out.println("hai");
                 }else{
                    JOptionPane.showMessageDialog(error,"Enter only numeric");
                }
                break;
            case Alphanumeric:
                break;
        }
    }
    enum value{
        Alpha,
        Numeric,
        Alphanumeric    
    }
}

2 个答案:

答案 0 :(得分:2)

问题是您对两个文本字段使用相同的KeyListener。相反,为每个文本字段使用不同的文本字段,如下所示:

class valid  {
    perform1 per1=new perform1();
    String num1="Alpha";
    String num2="Numeric";
    String num3="Alphanumeric";
    JFrame fr=new JFrame();
    JPanel jp=new JPanel();
    JLabel label1=new JLabel("STUDENT NAME");
    JLabel label2=new JLabel("REG NO");
    JTextField text1=new JTextField(15);
    JTextField text2=new JTextField(15);
    public valid(){
        text1.addKeyListener(new KeyAdapter() {
            @Override
            public void keyReleased(KeyEvent e) {
                per1.dis(text1, e, num1);
            }

        });
        text2.addKeyListener(new KeyAdapter() {
            @Override
            public void keyReleased(KeyEvent e) {
                per1.dis(text2, e, num2);
            }

        });
        jp.add(label1);
        jp.add(text1);
        jp.add(label2);
        jp.add(text2);
        fr.add(jp);
        fr.setSize(450, 330);
        fr.setVisible(true);
    }

    public static void main(String ar[])
    {
        new valid();
    }

}

答案 1 :(得分:1)

我认为最好的解决方案是拥有两个类:

class performString {

    public void perform(JTextField PTxtCtrl,KeyEvent PKeyvalue) {
        // work on strings here
    }

}

class performNumeric {

    public void perform(JTextField PTxtCtrl,KeyEvent PKeyvalue) {
        // work on numerics here
    }

}

然后,你可以这样做

public void keyReleased(KeyEvent e) {
    if(e.getSource() == label1) per1.perform(text1, e);
    else if(e.getSource() == label2) per2.perform(text2, 2);
}