2012-04-11 31 views
7

Ứng dụng của tôi cung cấp khả năng khởi chạy tác vụ lâu dài. Khi điều này xảy ra, JDialog là vô ích cho thấy tiến trình của nhiệm vụ. Tôi đặc biệt làm cho hộp thoại vô dụng để cho phép người dùng tương tác với phần còn lại của GUI trong khi nhiệm vụ chạy.JDialog không cần thiết phải hiển thị trên đầu trang của phụ huynh

Sự cố mà tôi đang gặp phải là nếu hộp thoại bị ẩn sau các cửa sổ khác trên màn hình, sẽ khó xác định vị trí: Không có mục tương ứng trên thanh tác vụ (trên Windows 7). trong menu Alt + Tab.

Có cách nào để giải quyết vấn đề này không? Tôi đã cân nhắc việc thêm WindowListener vào ứng dụng JFrame và sử dụng điều này để đưa JDialog lên nền trước. Tuy nhiên, điều này có khả năng trở nên bực bội (như có lẽ nó sẽ có nghĩa là JFrame sau đó mất tập trung).

+0

Tại sao bạn không sử dụng một JFrame để thay thế? Đó là một trong những điểm khác biệt chính: nút trên thanh tác vụ. –

+0

Vì tôi không muốn hộp thoại cung cấp tối đa hóa hoặc giảm thiểu chức năng. – Adamski

+0

Bạn có thể sử dụng setResizable (false); Tôi sẽ cho phép giảm thiểu, nếu không, ứng dụng có thể là một chút xúc phạm, IMO. –

Trả lời

8

Bạn có thể tạo một hộp thoại không theo kiểu và đặt cho nó một khung/hộp thoại chính. Khi bạn mở hộp thoại/khung hình chính, nó cũng mang đến hộp thoại không theo phương thức.

Something như thế này minh họa điều này:

public static void main(String[] args) throws IOException { 
    JFrame frame = new JFrame(); 
    frame.setTitle("frame"); 
    JDialog dialog = new JDialog(frame, false); 
    dialog.setTitle("dialog"); 
    final JButton button = new JButton("Click me"); 
    button.addActionListener(new ActionListener() { 

     @Override 
     public void actionPerformed(ActionEvent e) { 
      JOptionPane.showMessageDialog(button, "Hello"); 
     } 
    }); 
    final JButton button2 = new JButton("Click me too"); 
    button2.addActionListener(new ActionListener() { 

     @Override 
     public void actionPerformed(ActionEvent e) { 
      JOptionPane.showMessageDialog(button2, "Hello dialog"); 
     } 
    }); 
    frame.add(button); 
    dialog.add(button2); 
    frame.pack(); 
    dialog.pack(); 
    frame.setVisible(true); 
    dialog.setVisible(true); 
} 
+0

Cảm ơn - điều đó đã có tác dụng. Hình như tôi đã thiết lập vị trí của hộp thoại liên quan đến một thành phần cha mẹ nhưng không thực sự xây dựng JDialog với một chủ sở hữu. – Adamski

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