Tôi đang tạo trình chỉnh sửa cấp cho trò chơi của mình. Tôi có một bảng điều khiển thuộc tính, nơi tôi có thể sửa đổi đối tượng đã chọn thuộc tính của nó. Tôi cũng có một nút Lưu để viết cấp xml.Java Swing: Tập trung vấn đề
Một lĩnh vực chỉnh sửa được gửi (*) khi các thành phần biên tập mất tập trung hoặc Nhập được nhấn. Đây là hoạt động rất tốt, nhưng vấn đề duy nhất là khi tôi có chuỗi hành động này:
- Sửa một lĩnh vực
- Nhấn nút lưu
Bởi vì, những gì sẽ xảy ra đây là:
- tôi sửa ruộng
- tôi nhấn vào nút lưu
- các le vel được lưu
- Các lĩnh vực bị mất trọng tâm
- Tóm lược sửa đổi được gửi
Như bạn có thể thấy, đây là thứ tự sai. Tất nhiên tôi muốn lĩnh vực mất tập trung của nó, gây ra trình và sau đó lưu mức.
Có mẹo, hack hoặc giải pháp để làm cho trường đầu tiên mất tập trung và sau đó thực hiện trình xử lý tác vụ của nút lưu không?
Xin cảm ơn trước.
(* nộp = chỉnh sửa để lĩnh vực này cũng được thực hiện trong các đối tượng sở hữu)
EDIT: Đối với lĩnh vực này tôi đang sử dụng một FocusAdapter với focusLost
:
FocusAdapter focusAdapter = new FocusAdapter()
{
@Override
public void focusLost(FocusEvent e)
{
compProperties.setProperty(i, getColor());
record(); // For undo-redo mechanism
}
};
Và cho nút một đơn giản ActionListener
với actionPerformed`.
btnSave.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
// Save the level
}
});
không biết mã của bạn hoạt động như thế nào, vui lòng đăng mã có liên quan ở đây, vì có một tùy chọn khác bằng cách sử dụng 'DocumentListener' hoặc bằng cách sử dụng' AncesorListener' hoặc chỉ đưa bạn 'FocucHell' vào' invokeLater' với 'myTextField.setText (myTextField.getText); ' – mKorbel
@mKorbel: Tôi đã thử gói quá trình lưu vào một' invokeLater', nhưng nó vẫn theo thứ tự sai. –
Xem thêm [Hỏi & Đáp] này (http://stackoverflow.com/questions/6803976/focusevent-doesnt-get-the-last-value-of-jformattedtextfield-how-i-can-get-it/6804749#6804749) . – trashgod