2009-01-13 36 views
11

Tôi hiện đang gặp sự cố với ứng dụng nhắc nhở xoay của mình, có thể giảm thiểu đến khay khi đóng. Vấn đề của tôi ở đây là, tôi cần hộp thoại JOptionPane bật lên theo thời gian theo những gì tôi đặt, nhưng vấn đề ở đây là, khi tôi thu nhỏ nó, hộp thoại sẽ bật lên, nhưng không ở trên cùng của cửa sổ khi ứng dụng khác như explorer, firefox đang chạy, bất cứ ai biết làm thế nào để bật lên hộp thoại trên đầu trang của cửa sổ không có vấn đề gì ứng dụng đang chạy?JOptionPane sẽ không hiển thị hộp thoại của nó trên đầu trang của các cửa sổ khác

Trả lời

3

Windows đang chặn thao tác này kể từ XP.

Kịch bản trước đây là: Mẹo của bạn trong một số văn bản trong trình chỉnh sửa và không nhận ra rằng một hộp thoại khác đang đến trước khi bạn đang nghiêng văn bản. Hộp thoại sắp tới sẽ lấy tiêu điểm và bạn đang bắt đầu trong hộp thoại mới. Có thể bạn bấm vào sau khi bạn đã sẵn sàng và làm điều này trong hộp thoại sai, mà là yêu cầu xem bạn thực sự muốn xóa đĩa cứng của bạn;)

Cuộc gọi đến trước trong java chỉ hoạt động cho cửa sổ java.

Khả năng thông báo cho người dùng cửa sổ mới là triển khai Khung, sẽ đánh dấu/nhấp nháy trên thanh tác vụ của cửa sổ.

+0

Để mở rộng trong nhận xét, điều này thực sự tốt. Sử dụng cái gì đó mở rộng JFrame thay vì một cái gì đó kéo dài JDialog để có được một cái gì đó nhấp nháy trong thanh tác vụ khi bạn gọi mang đến phía trước –

1

Thay vào đó, bạn có thể nghĩ đến việc sử dụng JFrame. Nó có thể giúp bạn linh hoạt hơn một chút.

Nếu bạn đang sử dụng một JFrame và bạn muốn nó bật lên trên đầu trang của các cửa sổ khác sử dụng:

myFrame.setVisible(true); 
myFrame.setState(Frame.NORMAL); 

Các setstate sẽ hiển thị cửa sổ để người dùng nếu nó được trong trạng thái giảm thiểu trước đó.

4

Bạn đang sử dụng một trong những thiết bị tập thể dục đóng hộp chưa? (Giống như JOptionPane.showCOnfirmDialog (...))

Bạn có thể xem xét việc mở rộng JDialog và tạo bảng điều khiển của riêng bạn, sau đó gọi myDialog.setAlwaysOnTop (true);

3

Correction bài viết ở trên ..

Tôi có giải quyết vấn đề của tôi như sau:

this.setVisible(true); // show main frame 
MyDialog dialog = New MyDialog(this, true); // show my custom dialog 
dialog.setVisible(true); 
this.setVisible(false); 

nó hoạt động tốt đối với tôi :)

10

Tạo một JFrame tương ứng giả có sản phẩm nào, thiết lập nó luôn trên đầu trang và sử dụng nó làm thành phần cho JOptionPane thay vì null. Vì vậy, các JOptionPane vẫn luôn luôn trên đầu trang trên tất cả các cửa sổ khác của một ứng dụng. Bạn cũng có thể xác định nơi JOptionPane xuất hiện trên màn hình với vị trí của JFrame giả.

JFrame frmOpt; //dummy JFrame 

private void question() { 
    if (frmOpt == null) { 
     frmOpt = new JFrame(); 
    } 
    frmOpt.setVisible(true); 
    frmOpt.setLocation(100, 100); 
    frmOpt.setAlwaysOnTop(true); 
    String[] options = {"delete", "hide", "break"}; 
    int response = JOptionPane.showOptionDialog(frmOpt, msg, title, JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, "delete"); 
    if (response == JOptionPane.YES_OPTION) { 
     removeRow(); 
    } 
    frmOpt.dispose(); 
} 
5

Bài đăng cũ, nhưng tôi đã đấu tranh với điều này.

Vấn đề của tôi là nhiều hơn với Javafx cho phép JOptionPane đi phía sau cửa sổ Java hiện tại.

Vì vậy, tôi đã sử dụng những điều sau đây làm những gì mà áp phích ban đầu được yêu cầu bằng cách đặt JOptionPane trước tất cả các cửa sổ; thậm chí là JAVAFX.

Thứ nhất JOptionPane cũ:

JOptionPane.showMessageDialog(null, "Here I am"); 

Bây giờ một JOptionPane mà vẫn ở phía trước:

final JDialog dialog = new JDialog(); 
dialog.setAlwaysOnTop(true);  
JOptionPane.showMessageDialog(dialog, "Here I am"); 

Và cho vui ở đây là tất cả mọi thứ trong một dòng dài:

JOptionPane.showMessageDialog(
       ((Supplier<JDialog>)() -> {final JDialog dialog = new JDialog(); dialog.setAlwaysOnTop(true); return dialog;}).get() 
       , "Here I am"); 

Bạn có thể làm cho một phương pháp tĩnh một số nơi mà sẽ trả lại JDialog cho bạn và sau đó chỉ cần gọi nó trong JOptionPan e để làm sạch mã của bạn một chút.

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