2011-09-05 22 views
5

Mã nào sẽ tạo thuận lợi cho việc tạo JDialog không thể di chuyển? Tôi đã xem xét hai tùy chọn:Java - JDialog unmovable

  1. setUndecorated(true); hoạt động nhưng loại bỏ tất cả các trang trí.
  2. addComponentListener và ghi đè phương pháp componentMoved(), gây ra số JDialog để sau đó gọi induceEpilepticSeizure() khi di chuyển.

Bất kỳ ý tưởng nào?

+2

Bạn có thể giải thích lý do bạn muốn thực hiện việc này không? Nó có thể đưa ra một ý tưởng cho một cách tiếp cận hoạt động. –

Trả lời

5

Bản năng đầu tiên của tôi là - bạn không thể trừ khi bạn KHÔNG sử dụng setUndecorated (true) ... Bạn có thể tự đặt một số trang trí ở đó, nhưng, tốt, UGH!

Vì vậy, nếu bạn muốn các trang trí gốc và bạn muốn nó bất động mà không có sự nhấp nháy kinh khủng từ việc sử dụng một người nghe thành phần, tôi nghĩ rằng bạn không thể. Bạn có thể tạo một đường viền theo cách thủ công mà LOOKS thích đường viền mặc định ... đây là một ví dụ về cách thực hiện, mặc dù tôi đã cố ý làm cho đường viền trông giống như điều xấu nhất mà bạn đã thấy cả ngày. Bạn sẽ cần phải tìm sự kết hợp đúng của các cuộc gọi BorderFactory để đạt được những gì bạn muốn làm.

public static void main(String[] args) throws InterruptedException { 
    JDialog frame = new JDialog((Frame) null, "MC Immovable"); 
    frame.setUndecorated(true); 
    JPanel panel = new JPanel(); 
    panel.setBorder(BorderFactory.createEtchedBorder(Color.GREEN, Color.RED)); 
    panel.add(new JLabel("You can't move this")); 

    frame.setContentPane(panel); 
    frame.pack(); 
    frame.setLocationRelativeTo(null); 
    frame.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); 
    frame.setVisible(true); 
} 
+1

Lý do tôi không sử dụng setUndecorated (true) là tôi muốn giữ đường viền mặc định. Cửa sổ có viền không? Cảm ơn anh chàng. –

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