Về phương thức showSaveDialog trong java

Mình đang làm 1 dự án nhỏ về notepad và vướng ở tùy chọn save as :((. Mong mn giúp đỡ vì mình không hiểu nguyên lý hoạt động của cái phương thức này nó hoạt động kiểu gì, ai rảnh cho mình xin luôn 1 đoạn ví dụ về cách mà nó lưu lại nội dung trong khung TextArea thành 1 file mới ạ?
Mình cảm ơn.

Thường thì sẽ có 2 tùy chọn lưu như sau:

  • Save.
  • Save As (New).

2 mục gần giống nhau thôi. Chỉ khác là cái thứ 2 sẽ luôn tạo mới một tập tin. Bởi vậy nếu nội dung chưa lưu lần nào thì 2 mục hoàn toàn giống nhau.
Chỉ xét đến khi tập tin đã được lưu (hoặc được mở từ tập tin có sẵn).

Khi chưa lưu:

  • Chọn Save: do chưa lưu nên hiện showSaveDialog().
  • Chọn Save As: hiện showSaveDialog().

Khi đã lưu/mở trước đó:

  • Chọn Save: do đã lưu trước đó, lưu luôn theo đường dẫn của tập tin. Không hiện showSaveDialog().
  • Chọn Save As: hiện showSaveDialog().

Nói chung lại thì:

  • Save As luôn hiện showSaveDialog() mỗi khi chọn.
  • Save thì xét có lưu chưa để mà hiện lên.
4 Likes

dạ mình cảm ơn ạ, vấn đề ở chỗ mình mới chỉ làm được cho nó lưu lại khi đã mở 1 tệp, còn tạo 1 tệp mới thì mình không rõ lắm, giúp mình với :disappointed_relieved:

Tức là bạn chưa lấy được đường dẫn mà phương thức showSaveDialog() đã chọn?

Phương thức này sẽ trả về số nguyên thể hiện cho:

Lấy đường dẫn lưu bằng phương thức getSelectedFile()

https://docs.oracle.com/javase/7/docs/api/javax/swing/JFileChooser.html#showSaveDialog(java.awt.Component)

Mẫu:

JFileChooser fc = ...;
fc.setMultiSelectionEnabled(false); // Chỉ chọn 1 tập tin
int ret = fc.showSaveDialog();
if(ret == JFileChooser.APPROVE_BUTTON){ // Chọn
File toSave = fc.getSelectedFile();
// Lưu theo tập tin nhận được.
}else if (ret == JFileChooser.CANCEL_BUTTON){ // Hủy
// Làm gì đó.
}else if (ret == JFileChooser.CANCEL_BUTTON){ // Lỗi
// Làm gì đó.
}
3 Likes

Bình thương khi bạn Save thì sẽ check xem file tồn tại hay chưa, nếu có thì lưu đè vào file, còn không thì tạo file mới.
Còn với Save As thì bạn chỉ cần bỏ cái check đó đi là đc mà, nghĩa là luôn luôn showSaveDialog();.

4 Likes

Mình hiểu rồi ^^, không biết có phải mod của diễn đàn ko nhưng cảm ơn bạn nhiều ạ

Cảm ơn bạn ^^ mình hiểu rồi

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?