当前位置: 代码迷 >> Java相关 >> 设置文本不可写
  详细解决方案

设置文本不可写

热度:320   发布时间:2006-11-29 12:51:40.0
以下是引用yqfang310在2006-11-29 12:16:43的发言:
而且请不要这样说别人,这样会让别人觉得你很看不起人,真是郁闷!!

呵呵,
但是这种错误是不可能会发生的啊
你是怎么发生的呢?
应该不要每次帖一 点点代码,还有,编译器会告诉你错在哪一行,你看源代码的那一行就知道错了
而不要想当然的认为是那里错了,也许错的不是jt.setEditable呢


----------------解决方案--------------------------------------------------------

它指的就是jt2啊
import java.io.*;
import java.util.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class abc extends JFrame implements ActionListener
{
int ch; //选择项数
int num; //输入num个元素;
int i=0;
int A[];

JTextField jt1=new JTextField(20);
JTextField jt2=new JTextField(20);
JTextField jt3=new JTextField(19);
jt2.setEditable(false);

JLabel lb1=new JLabel("排序算法:(1-冒泡排序;2-选择排序;3-插入排序)");
JLabel lb2=new JLabel("请选择排序算法:");
JLabel lb3=new JLabel("排序元素个数为:");
JLabel lb4=new JLabel("输入要排序的元素:");
JLabel lb5=new JLabel("排序结果如下: ");

static JTextArea ja=new JTextArea(10,20);

ScrollPane jp=new ScrollPane();

JButton btn=new JButton("确定");

String str1=new String();
String str2=new String();
String str3=new String();


abc()
{
Container cp=getContentPane();
cp.setLayout(new FlowLayout(0));

jp.add(ja); //jp容器中加入ja
jp.setSize(250,210);

cp.add(lb1);
cp.add(lb2);
cp.add(jt1);
cp.add(lb3);
cp.add(jt2);
cp.add(lb4);
cp.add(jt3);
cp.add(lb5);
cp.add(jp);
cp.add(btn);

jt1.addActionListener(this);
jt2.addActionListener(this);
jt3.addActionListener(this);
btn.addActionListener(this);

setResizable(false);
setBounds(200,200,350,400);
setVisible(true);

}
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==jt1)
{
// try{
str1=jt1.getText();
ch=Integer.parseInt(str1);
// }
// catch(Exception e)
// {
//JOptionPane.showMessageDialog(null, "输入错误", "错误", JOptionPane.ERROR_MESSAGE);
// }
}
if(e.getSource()==jt2)
{
str2=jt2.getText();
num=Integer.parseInt(str2);
A=new int[num];
}
if(e.getSource()==jt3)
{
int a; //定义一个获取数据的变量
if(i<num) //将数据存入一个数组A
{
str3=jt3.getText();
a=Integer.parseInt(str3);
A[i]=a;
i++;
}
}
if(e.getSource()==btn)
{
switch(ch)
{
case 1:
for(int i=0;i<num;i++)
{
String As=String.valueOf(A[i]);
ja.append(As+'\n');
}
Bubblesort(A);
break;
case 2:
SelectSort(A);break;
case 3:
Insertsort(A);break;
default:
ja.setText("算法选择错误!");
}
}

}
public static void main(String args[]) throws IOException
{
abc cp=new abc();
cp.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);






}
public static void Bubblesort(int A[])
{
int n = A.length;
int t=0,l=0,q=0;//t记录比较次数,l记录移动次数 ,q为交换次数
int log=0;int temp;

String ts=new String();//用于将t,q,l分别转换为String型,便于输出
String qs=new String();
String ls=new String();
String time=new String();

long ft=System.currentTimeMillis();
for (int i = n-1; i>=1&log==0; i--)
{
log=1;
for (int j = 0; j < i; j++)
{
if (A[j] > A[j + 1])
{
temp = A[j];
A[j] = A[j + 1];
A[j + 1] = temp;
log=0;
l++;
q+=3;
}
t++;
}
}
long lt=System.currentTimeMillis();
ja.append("冒泡算法运行结果为:"+'\n');
time=String.valueOf(lt-ft);
ja.append("运行该算法的时间为:"+time+'\n');
cout(A);
ts=String.valueOf(t);//int转换为String
qs=String.valueOf(t);
ls=String.valueOf(t);

ja.append("该排序算法中数据比较次数为: "+ts+'\n');
ja.append("该排序算法中数据交换次数为: "+qs+'\n');
ja.append("该排序算法中数据移动次数为: "+ls+'\n');

}
public static void SelectSort(int A[])
{
int temp;int t=0,l=0,q=0;
String ts=new String();//用于将t,q,l分别转换为String型,便于输出
String qs=new String();
String ls=new String();
String time=new String();
long ft=System.currentTimeMillis();
for(int i=0;i<A.length-1;i++)
{
for(int j=i;j<A.length-1;j++)
{
if(A[j]<A[j+1])
{
temp = A[j];
A[j] = A[j + 1];
A[j + 1] = temp;
l++;
q+=3;
}
t++;
}
temp = A[A.length-1];
A[A.length-1] = A[i];
A[i] = temp;
l++;
q+=3;

}
long lt=System.currentTimeMillis();
ja.append("选择排序算法运行结果为:"+'\n');
time=String.valueOf(lt-ft);
ja.append("运行该算法的时间为:"+time+'\n');
cout(A);
ts=String.valueOf(t);//int转换为String
qs=String.valueOf(t);
ls=String.valueOf(t);

ja.append("该排序算法中数据比较次数为: "+ts+'\n');
ja.append("该排序算法中数据交换次数为: "+qs+'\n');
ja.append("该排序算法中数据移动次数为: "+ls+'\n');
}
public static void Insertsort(int A[])
{
int k=A.length;
int temp;int t=0,l=0,q=0;
int[] B=new int[k];
B[0]=A[0];
String ts=new String();//用于将t,q,l分别转换为String型,便于输出
String qs=new String();
String ls=new String();
String time=new String();

long ft=System.currentTimeMillis();
for(int i=1;i<k;i++)
{
B[i]=A[i];
for(int j=i;j>=1;j--)
{
if(B[j-1]>B[j])

{
temp=B[j];
B[j]=B[j-1];
B[j-1]=temp;
l++;
q+=3;
}
t++;
}
}
long lt=System.currentTimeMillis();
ja.append("插入排序算法运行结果为:"+'\n');
time=String.valueOf(lt-ft);
ja.append("运行该算法的时间为:"+time+'\n');
cout(B);
ts=String.valueOf(t);//int转换为String
qs=String.valueOf(t);
ls=String.valueOf(t);

ja.append("该排序算法中数据比较次数为: "+ts+'\n');
ja.append("该排序算法中数据交换次数为: "+qs+'\n');
ja.append("该排序算法中数据移动次数为: "+ls+'\n');
}
public static void cout(int A[])
{//实现排序结果的输出
String As=new String();//用于将ing转换为String
ja.append("排序的结果: ");
for(int k=0;k<A.length;k++)
{
As=String.valueOf(A[k]);
ja.append(A[k]+" ");
}
ja.append(""+'\n');
}

}
你帮我看一下吧,还有,我这个程序一输入汉字就会有问题,只有输入整数才可以,有没有可以捕捉错误的方法,我试了catch(Exception e)怎么不行啊,谢谢


----------------解决方案--------------------------------------------------------
jt2.setEditable(false);

就是这句出问题了

你怎么能把它放到方法外面去呢?

方法外面只能有声明和赋值语句

所以,你把它放入构造函数就没事了

----------------解决方案--------------------------------------------------------
以后一定要记得,养成把事情分成各种方法的习惯

不要什么都在一起完成
因为这样出了问题,哇,一大串代码怎么去排错

写程序如果写得有条理性,排错也方便多了


----------------解决方案--------------------------------------------------------

谢啦,千里版主,之前对你的话有些误会,不好意思啊,在你这里让我学到了许多,谢谢,感激涕零


----------------解决方案--------------------------------------------------------

还有一个问题,这个程序只能输入数字,一输入字符就出错了,能否有什么方法可以将它捕捉到的??


----------------解决方案--------------------------------------------------------

我用了catch(Exception e)怎么不行啊


----------------解决方案--------------------------------------------------------
因为你是想把输入的东西变成int,那如果你输入了非int值,当然会报错啦

----------------解决方案--------------------------------------------------------

我就是想提高我程序的建壮性嘛,有时别人会输成汉字的嘛,这时就会出错了,我的意思是想当用户输入的不是数字时,可以有提示,然后重新输入,只是不知道要怎么弄啦


----------------解决方案--------------------------------------------------------

当然 是捕捉NumberFormatException这个异常啦,捉到它的时候,弹出一个对话框提示用户就可以了,提示它不要输入数字以外的字符

String input=jt1.getText().trim();


try{
int i=Integer.parseInt(input);
}
catch(NumberFormatException ne){

JOptionPane.showMessage(null,"您输入了非数字字符!\n请重新输入!");
}


----------------解决方案--------------------------------------------------------
  相关解决方案