2012-06-19 39 views
5

Trong một chương trình tôi đang làm việc trên, một textfield phải hiển thị một số văn bản tại một số điểm.Làm thế nào để xóa một chuỗi?

output.setText(outputString); 
outputString = ""; 

đầu ra là JTextField. Những dòng mã này là một phương thức, và khi nó được gọi là lần đầu tiên, nó hoạt động hoàn toàn tốt đẹp. Tuy nhiên, khi nó được gọi là một thời gian khác, văn bản outputString ban đầu vẫn còn. Tại sao điều này xảy ra và tôi có thể khắc phục nó như thế nào?

Được rồi, tôi nghĩ điều đó xảy ra vì các chuỗi không thay đổi được. Vấn đề là, outputString không bao giờ thay đổi, do đó, nó vẫn có văn bản từ cuộc gọi phương thức ban đầu.

Làm cách nào để, bằng cách nào đó, thay đổi văn bản trong chuỗi?

+0

kẻ Được rồi, tôi chỉ cố gắng đó cùng câu trả lời đã được trao cho tôi 5 lần. Nó không hoạt động. Tôi đặt output.setText (""); ngay trước output.setText (outputString) ;, nhưng outputString không thay đổi, vì vậy nó vẫn chứa đoạn văn bản trước đó. – kullalok

+0

đăng mã đầy đủ ... –

+0

"ngay trước khi output.setText (outputString)". Tất nhiên điều đó sẽ không rõ ràng văn bản, bạn chỉ cần ghi đè lên nó. Nếu bạn muốn xóa văn bản, bạn phải gọi setText ("") SAU. –

Trả lời

5

Thiết lập văn bản với nội dung của biến của bạn không thiết lập một mối quan hệ lâu dài giữa các biến và lĩnh vực văn bản, nếu bạn muốn xóa các văn bản, bạn có thể sử dụng

output.setText(""); 
0

Bạn có đặt chuỗi đầu ra thành "" sau khi bạn cố gắng đặt văn bản của JTextField không? Nếu vậy, bạn nên cố gắng làm một cái gì đó như thế này:

output.setText(""); 
0
output.setText(""); 

sẽ giải quyết vấn đề này

1

Tại sao điều này xảy ra?

Chuỗi không thay đổi.

Luôn có tham chiếu mới cho Chuỗi. Do đó, khi bạn gọi outputString = "";, Chuỗi mới sẽ được tạo.

Làm cách nào để khắc phục sự cố?

Gọi output.setText("");.

1

Mã của bạn đang làm gì, trước tiên hãy đặt nội dung của trường văn bản thành nội dung của biến outputString của bạn trong: output.setText(outputString);.

Dòng mã tiếp theo của bạn không thay đổi đối tượng String, là nội dung của trường văn bản của bạn, mà là đặt biến outputString của bạn để tham chiếu đến biến chuỗi trống. Các chuỗi không thay đổi trong java, không thể có thay đổi đối với một biến chuỗi phản ánh một biến khác.

Như một số người đã nêu, bạn cần đặt nội dung của trường văn bản bằng cách gọi: jTextFieldVar.setText(""); hoặc jTextFieldVar.setText(null);.

0

Tôi nghĩ rằng những gì bạn đang tìm kiếm là:

output.setText(""); 
2

Tôi nghĩ rằng bạn đang hiểu nhầm cái gì đó rất quan trọng. Java Strings là bất biến có nghĩa là bạn không thể thay đổi chúng.

"Làm cách nào, bằng cách nào đó, thay đổi văn bản trong chuỗi?"

Bạn không thể. Không thể thay đổi văn bản trong chuỗi. Nó là bất biến. Bất kỳ "giải pháp" có liên quan đến việc thay đổi văn bản trong một chuỗi KHÔNG LÀM VIỆC trong Java. (Got đó?)

Khi bạn làm điều này:

output.setText(outputString); 
outputString = ""; 

phân không thay đổi giá trị được hiển thị trong lĩnh vực văn bản. Nó chỉ thay đổi String mà biến cục bộ outputString đề cập đến.

Và khi bạn làm điều này:

output.setText(""); 
output.setText(outputString); 

nó không gây outputString thay đổi. Nó chỉ thay đổi văn bản được hiển thị thành không có gì và sau đó ngay lập tức thay đổi nó thành bất cứ điều gì outputString hiện đang đề cập đến.

Nếu bạn muốn thay đổi giá trị hiển thị trong lĩnh vực văn bản không có gì, bạn JUST làm điều này:

output.setText(""); 

Có lẽ điều khác mà bạn đã sai trong suy nghĩ của bạn là bạn nghĩ rằng đây :

output.setText(outputString); 

thiết lập một mối quan hệ giữa các lĩnh vực văn bản output và biến outputString ... như vậy mà khi người dùng nhập vào lĩnh vực này, biến outputString được cập nhật một cách kỳ diệu. Đó không phải là như vậy. Trong thực tế, nó KHÔNG THỂ được như vậy, bởi vì bạn không thể vượt qua địa chỉ của biến.

Thực tế, output.setText(outputString); chỉ cần chuyển giá trị của outputString vào đối tượng hộp văn bản. Nếu và khi người dùng nhập nội dung nào đó vào hộp, các ký tự được lưu ở một nơi khác và chỉ trả lại mã của bạn ... làm Chuỗi mới ... khi mã của bạn gọi output.getText().

0

điều này sẽ chỉ hoạt động tốt.

output.setString ("");

0

Câu trả lời khác chỉ ra rằng Chuỗi không thay đổi là chính xác.

Nhưng nếu bạn muốn có các chức năng của "thanh toán bù trừ một String", bạn có thể use a StringBuffer instead and call this on it:

stringBuffer.delete(0, stringBuffer.length()); 
Các vấn đề liên quan