在下面的代码部分中,我创建了两个类。第一类用于设计,我保留了两个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
}
}
答案 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);
}