2008-11-09 38 views
21

Tôi có một cửa sổ (bắt nguồn từ JFrame) và tôi muốn tắt nút đóng trong các hoạt động nhất định không bị gián đoạn. Tôi biết tôi có thể làm cho nút không làm bất cứ điều gì (hoặc gọi một trình xử lý trong WindowListener) bằng cách gọiLàm thế nào để vô hiệu hóa (hoặc ẩn) nút đóng (x) trên JFrame?

setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); 

nhưng tôi muốn làm rõ bằng mắt rằng việc nhấp vào nó là vô nghĩa.

+0

Chỉ cần một gợi ý, bạn có thể muốn xem xét tránh hành vi GUI như do khả năng sử dụng kém. – Josh

+0

Tôi đồng ý với Josh. Ít nhất là bản đồ gần cửa sổ bật lên có nội dung "Đang hoạt động trong tiến trình ..." với nút "Hủy" (ẩn cửa sổ bật lên) và nút "Đóng mọi cách" (buộc thoát). Khi hoạt động nền hoàn tất, ứng dụng sẽ đóng nếu popup đó vẫn hiển thị (nghĩa là chúng chưa nhấp Cancel) – SCdF

+0

có thể trùng lặp [Làm cách nào để ẩn các nút thu nhỏ/tối đa và đóng mặc định trên cửa sổ JFrame trong Java?] (Http://stackoverflow.com/questions/9101418/how-to-hide-the-default-minimize-maximize-and-close-buttons-on-jframe-window-in) – Nathan

Trả lời

9

Nếu tôi hiểu chính xác, this bug report cho biết điều này hiện không thể thực hiện được.

18

Đây có lẽ là tốt nhất mà bạn sẽ nhận được:

setUndecorated(true); 
getRootPane().setWindowDecorationStyle(JRootPane.NONE); 

này sẽ loại bỏ toàn bộ thanh tiêu đề, java không thực sự xác định một cách để loại bỏ các thành phần riêng lẻ của titlebar

chỉnh sửa:

có thể có một cách, hãy kiểm tra các chủ đề:

5

Đối với những người đến đây muộn hơn năm 2008, đã có một sự thay đổi làm cho nó có thể để làm điều này. Xem this link

Phản hồi thứ hai từ dưới cùng cho biết cách thực hiện theo tên.

+1

Giống như nhiều thứ khác trong Swing, điều này cũng là một BANH MY PITA. –

+0

* Phản hồi thứ hai từ phía dưới *, hiện tại là cái gì, 5 năm sau? Có thể liên kết với nó ("chia sẻ" liên kết ở dưới cùng của nó) hay trích dẫn nguyên tắc cốt lõi? Ngoài ra, bạn có thể chi tiết hơn một chút về "thay đổi" mà bạn đang đề cập đến không? – Matthieu

0

Vui lòng thử này

frame.addWindowListener(new WindowAdapter() { 
     public void windowClosing(WindowEvent e) { 
     e.getWindow().setVisible(false); 
      try { 
       wait(); 
      } catch (InterruptedException ex) { 
       Logger.getLogger(WindowsActions.class.getName()).log(Level.SEVERE, null, ex); 
      } 
     } 
    }); 
0

này sẽ giúp bạn:

frame.setDefaultCloseOperation(0); 
+1

Tại sao địa ngục này bị downvoted mà không có bất kỳ bình luận? Nó chặn hoạt động đóng theo yêu cầu. Mặc dù tốt hơn thể hiện như 'setDefaultCloseOperation (JFrame.DO_NOTHING_ON_CLOSE)' –

+2

Tôi đã phải sử dụng ba dòng để tránh java tắt khi tôi có một số PApplet (Processing) được khởi chạy: 'this.jframe.setDefaultCloseOperation (JFrame.DO_NOTHING_ON_CLOSE; this.jframe .setUndecorated (true); this.jframe.getRootPane(). setWindowDecorationStyle (JRootPane.NONE); ' – ezawadzki

+0

Như Tomas Zato đã nói, Nó đã giúp tôi;) – Furkan

Các vấn đề liên quan