2011-09-21 23 views
8

Ive đã triển khai thực hiện jFileChooser trong chương trình dòng lệnh của tôi và nó hoạt động, giống như nó chỉ với một vấn đề gây phiền nhiễu. Dường như nó mở ra bên dưới mỗi cửa sổ mà không có bất kỳ cảnh báo nào. Trong thực tế, tôi thậm chí bỏ lỡ nó một vài lần lúc đầu tiên tôi tin rằng tôi đã thực hiện nó sai.JFileChooser từ một chương trình dòng lệnh và bật lên Phía dưới tất cả các cửa sổ

Tôi đã thực hiện điều này như sau:

System.out.println("Please select the file"); 
JFileChooser fc = new JFileChooser(); 
int retValue = fc.showOpenDialog(new JPanel()); 
if(retValue == JFileChooser.APPROVE_OPTION){ 
    g.inputFile = fc.getSelectedFile(); 
}else { 
    System.out.println("Next time select a file."); 
    System.exit(1); 
} 

Về cơ bản tôi chỉ muốn JFileChooser để có người sử dụng chọn một tập tin như một tập tin đầu vào. Đây là thành phần duy nhất có nhu cầu thực hiện GUI, vì vậy nếu tôi có thể tránh viết một GUI, điều đó sẽ hữu ích.

+0

xem ** Chỉnh sửa 2 ** trong câu trả lời của tôi bên dưới. –

+0

Chủ đề này có thể hoặc không thể trợ giúp: http: // stackoverflow.com/questions/5129294/bring-jfilechooser-on-top-of-all-windows – Zammbi

Trả lời

10

Vì vậy, sau khi thử nhiều điều từ các chủ đề stack overflow khác nhau tôi đã kết thúc với một kết quả mà một cách nhất quán và đáng tin cậy mở trên hết mọi cửa sổ trên Windows 7.

public class ChooseFile { 
    private JFrame frame; 
    public ChooseFile() { 
     frame = new JFrame(); 

     frame.setVisible(true); 
     BringToFront(); 
    } 
    public File getFile() { 
     JFileChooser fc = new JFileChooser(); 
     if(JFileChooser.APPROVE_OPTION == fc.showOpenDialog(null)){ 
      frame.setVisible(false); 
      return fc.getSelectedFile(); 
     }else { 
      System.out.println("Next time select a file."); 
      System.exit(1); 
     } 
     return null; 
    } 

    private void BringToFront() {     
        frame.setExtendedState(JFrame.ICONIFIED); 
      frame.setExtendedState(JFrame.NORMAL); 

    } 

} 

Khi đứng trong chương trình của tôi nó là một lớp bên trong và được gọi bằng cách gọi:

System.out.println("Please select the file"); 
g.inputFile = g.new ChooseFile().getFile(); 
+0

Điều này đã giúp tôi vô cùng. Chỉ 5 dòng này trong một đoạn ngay trước khi sử dụng JFileChooser cố định mọi thứ: ** JFrame jFrame cuối cùng; jFrame = new JFrame(); jFrame.setVisible (true); jFrame.setExtendedState (JFrame.ICONIFIED); jFrame.setExtendedState (JFrame.NORMAL); ** –

+0

Tôi thực sự đang tìm kiếm một giải pháp đơn giản hơn ở đây (không có JFrame): http://stackoverflow.com/questions/17438630/how-to-generate-a-stand-alone -jfilechooser-dialog-box-on-top-of-other-windows ... nhưng nó không giống như tôi sẽ nhận được bất kỳ câu trả lời dễ dàng để thực hiện như thế này. –

+0

Cảm ơn sự giúp đỡ tuyệt vời! Tôi đã tùy chỉnh nó theo nhu cầu của tôi! –

4

tôi nghĩ về hai nguyên nhân có thể cho một cái gì đó như thế này:

  • Bạn đang cố gắng để trộn AWT và Swing GUI trong cùng một chương trình, hoặc
  • Bạn đang cố gắng để kết hợp một chương trình giao diện điều khiển (tức là, bằng cách sử dụng System.out.println (...) và nhận đầu vào thông qua một đối tượng Scanner) với một GUI Swing.

Nếu bạn đang làm một trong hai điều này, thì bạn nên đơn giản hóa và chỉ làm cho chương trình kiểu Swing GUI. Nếu thông tin này không hữu ích, thì bạn có thể muốn cung cấp cho chúng tôi thêm thông tin về vấn đề của bạn.

Chỉnh sửa 1
Tôi vừa nhận thấy chi tiết mã của bạn. JPanel mới() phần dưới đây là một vấn đề:

int retValue = fc.showOpenDialog(new JPanel()); 

Để thực hiện các hành động JFileChooser như một thoại để cửa sổ cấp cao nhất của bạn (mà nó hiện chưa được làm và đó là vấn đề chính của bạn), bạn nên thay vì vượt qua một thành phần nằm trong cửa sổ cấp cao nhất của phụ huynh, chẳng hạn như JPanel hoặc JButton được giữ bên trong JFrame hoặc JApplet của bạn.

Chỉnh sửa 2
OK, bạn đang cố gắng để kết hợp một giao diện điều khiển chương trình Java với một chương trình GUI Swing mà là giống như ăn kem với dưa chua - họ chỉ không đi cùng nhau. Không có cửa sổ cấp cao nhất để cung cấp phương thức showOpenDialog của JFileChooser để nó hoạt động như một hộp thoại thực.

Giải pháp tốt nhất là không làm điều này, thay vào đó hãy viết lại ứng dụng của bạn để trở thành một GUI hoàn chỉnh Swing.

3

Trong mã của tôi, tôi chỉ có thể sử dụng null và hoạt động. Tôi đang sử dụng Java 7 trên Windows 7.

JFileChooser chooser = new JFileChooser(System.getProperty("java.class.path")); 
FileNameExtensionFilter filter = new FileNameExtensionFilter("CSV files", "csv"); 
chooser.setFileFilter(filter); 
int returnVal = chooser.showOpenDialog(null); 
if(returnVal == JFileChooser.APPROVE_OPTION) { 
try { 
    Scanner inputFile= new Scanner(new File(chooser.getSelectedFile().getAbsolutePath())); 
} catch (FileNotFoundException e) { 
    e.printStackTrace(); 
} 
} 
+0

Câu trả lời thẳng mà không có bài giảng. Có thể xác nhận rằng mã trên hoạt động trong 1,7 & 1,8. – Frelling

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