должен получить доступ к оператору switchcase из другого класса, используя jtextfield - PullRequest
1 голос
/ 20 декабря 2011

В этом разделе кода ниже я создал два класса.Первый класс предназначен для проектирования. Я сохранил два поля jtextfield, одно из которых используется для получения значения String, другое используется для получения числового значения.Второй класс описывает функцию строки и числа для отображения значений в поле jtext.Я не могу получить доступ к строковому параметру в текстовых полях класса.

Если я буду использовать этот код, он получит доступ к обеим функциям в каждом поле jtext.Пожалуйста, дайте решение этой проблемы.

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 ]

2 голосов
/ 20 декабря 2011

Проблема в том, что вы используете один и тот же 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 голос
/ 20 декабря 2011

Я думаю, что лучшим решением было бы иметь два класса:

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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...