2008-11-03 38 views
8

Tôi đang viết một chương trình java cần một hộp thoại mở tệp. Hộp thoại mở tệp không khó, tôi hy vọng sẽ sử dụng JFileChooser. Vấn đề của tôi là tôi muốn có một ngăn kép JFrame (bao gồm 2 JPanels). Bảng điều khiển bên trái sẽ có một số JList và bảng điều khiển bên phải sẽ có hộp thoại mở tệp.JFileChooser được nhúng trong một JPanel

Khi tôi sử dụng JFileChooser.showOpenDialog(), điều này sẽ mở hộp thoại phía trên tất cả các cửa sổ khác, không phải là thứ tôi muốn. Có cách nào để có các JFileChooser (hoặc có thể một hộp thoại lựa chọn tập tin) hiển thị bên trong một JPanel và không bật lên trên nó?

Đây là mã mà tôi đã thử, tại thời điểm này nó rất đơn giản. Tôi chỉ cố gắng để có được JFileChooser để được nhúng vào trong JPanel tại thời điểm này.

public class JFC extends JFrame{ 
    public JFC() 
    { 
     setSize(800,600); 

     JPanel panel= new JPanel(); 

     JFileChooser chooser = new JFileChooser(); 
     panel.add(chooser); 

     setVisible(true); 

     chooser.showOpenDialog(null); 
    } 

    public static void main(String[] args) 
    { 
     JFC blah = new JFC(); 
    } 
} 

Tôi cũng đã cố gắng gọi chooser.showOpenDialog với thispanel, nhưng vô ích. Ngoài ra, tôi đã thử thêm trực tiếp JFileChooser vào khung. Cả hai nỗ lực được liệt kê ở trên vẫn có cửa sổ bật lên JFileChooser ở phía trước khung hoặc bảng điều khiển (tùy thuộc vào việc tôi thêm JFileChooser vào).

Trả lời

10

JFileChooser mở rộng JComponent và Component để bạn có thể thêm trực tiếp vào khung của mình.

JFileChooser fc = ... 
JPanel panel ... 
panel.add(fc); 
3

Nếu bạn đang thêm các JFileChooser khi đang bay, bạn sẽ cần phải gọi xác nhận lại().

Câu trả lời của Steve là chính xác. Bạn có thể thêm JFileChooser vào các vùng chứa khác.

5

Để truy cập vào "nút" trong file chooser, bạn sẽ có thêm một ActionListener với nó:

fileChooser.addActionListener(this); 
[...] 

public void actionPerformed(ActionEvent action) 
{ 
    if (action.getActionCommand().equals("CancelSelection")) 
    { 
     System.out.printf("CancelSelection\n"); 
     this.setVisible(false); 
     this.dispose(); 
    } 
    if (action.getActionCommand().equals("ApproveSelection")) 
    { 
     System.out.printf("ApproveSelection\n"); 
     this.setVisible(false); 
     this.dispose(); 
    } 
} 
2

Để Johannes: cảm ơn vì đoạn hữu ích của bạn.

Thay vì "ApproveSelection" và "CancelSelection" Tôi sử dụng các hằng số được xác định JFileChooser.APPROVE_SELECTIONJFileChooser.CANCEL_SELECTION

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