2015-09-21 64 views
0

我必須編寫一個基本上製作報告卡的程序,但直到它通過命令行參數或用戶從瀏覽器中選擇一個讀入文件時才能這樣做,這意味着我需要使用JFileChooser。我有JFileChooser的GUI設置,但這是我所能想到的。當我單擊打開時,對話框打開,但在選取文件後,我創建的窗口(GUI)不會關閉。此外,該程序運行通過我的所有其他方法之前,文件甚至加載導致其他問題。我嘗試過使用do-while循環,但它只是在我打開文件之前通過循環運行。JFileChooser混淆

import java.io.*; 
import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 

public class MP1 extends JFrame implements java.awt.event.ActionListener{ 
static StudentAssignments geen165 = new StudentAssignments(); 
static boolean fileReady = false; 
/** 
* @param args the command line arguments 
*/ 

public static void main(String [] args) { 

    do{ 
     if(args.length == 0 || args[0].isEmpty()){//reads in input from file 
                //select 
      MP1 doIt = new MP1(); 
      doIt.setVisible(true); 
     } 
     else{ 
     geen165.readGradeFile(args[0]);//reads in input file from command 
             //argument 
     } 
    }while(!fileReady); 
    //test methods 
     JOptionPane.showMessageDialog(null, geen165.getGradeReport()); 

     geen165.addAssignments(3, 98, 100); 
     geen165.saveGradeFile("NewGrades.txt"); 

     JOptionPane.showMessageDialog(null, geen165.getGradeReport()); 

     geen165.removeAssignment(0, 2); 
     JOptionPane.showMessageDialog(null, geen165.getGradeReport()); 
} 


//JFile Chooser GUI 
public MP1(){ 
    prepareGui(); 
} 

private void prepareGui(){ 
    setSize(500,500); 

    Container window = getContentPane(); 
    window.setLayout(new FlowLayout()); 


    JButton open = new JButton("Open"); 
    JButton cancel = new JButton("Cancel"); 
    JLabel status = new JLabel("You've selected: "); 

    //sets file when open is pressed 
    open.addActionListener((ActionEvent e) -> { 
     JFileChooser chooser = new JFileChooser(); 
     int returnVal = chooser.showOpenDialog(window); 
     if(returnVal == JFileChooser.APPROVE_OPTION){ 
      File fileName = chooser.getSelectedFile(); 
      status.setText("You've selected: " + fileName.getName()); 
      geen165.readGradeFile(fileName.getName()); 
      fileReady=true; 
     } 
    }); 
    //exits program if cancel is pressed 
    cancel.addActionListener((ActionEvent e) -> { 
     System.exit(1); 
    }); 
    window.add(open); 
    window.add(cancel); 
    window.add(status); 
    setDefaultCloseOperation(HIDE_ON_CLOSE); 
} 

@Override 
public void actionPerformed(ActionEvent e) { 
    throw new UnsupportedOperationException("Not supported yet."); //To change 
         //body of generated methods, choose Tools | Templates. 
} 
} 

有什麼建議嗎?

回答

0

您在複雜的一個簡單的問題。您無需構建窗口,只需使用JFileChooser即可。一個可行的簡單的解決方案是

import javax.swing.*; 

public class MP1 extends JFrame { 

    public static void main(String[] args) { 
     String myFile=""; 

     if (args.length == 0 || args[0].isEmpty()) {//reads in input from file 
      //select 
      JFileChooser chooser = new JFileChooser(); 
      int returnVal = chooser.showOpenDialog(null); 
      if (returnVal!=JOptionPane.CANCEL_OPTION) { 
       myFile = chooser.getSelectedFile().getPath(); 
      } else { 
       JOptionPane.showMessageDialog(null, "Thanks for playing!"); 
       System.exit(0); 
      } 
     } else { 
      myFile = args[0]; 
     } 
     JOptionPane.showMessageDialog(null, "You have selected "+myFile+". Go play!"); 
    } 

} 

請注意,我檢查是否有一個參數。如果沒有,我馬上去執行JFileChooser。沒有必要開銷。

我刪除了所有的課程活動,因爲我沒有這些文件。

順便說一句,我還沒有測試過,但我相信你的問題來自你的新框架不是模態。因此,在你做任何事情之前,布爾變量都被改變了。但這只是一個想法。

+0

好的,我認爲JFileChooser需要一個GUI。我會試試看看它是如何工作的。 – Jordyn

0

我想你需要知道JFileChooser是如何工作的。

JFileChooser fc = new JFileChooser(); 

int optionSelected = fc.showOpenDialog(YourClassName.this); 

if (optionSelected == JFileChooser.APPROVE_OPTION) { 
    File file = fc.getSelectedFile(); 
    ... // Do what you want with the file 
} 

JFileChooser