2011-11-07 90 views
0

在編寫此類的事件處理時遇到問題。不明白如何在GUI類中實現它。這不是一個分級作業或必須交給。這只是一些獨立的練習,以幫助Java編碼。下面是對問題的一些描述:走向數據結構類項目的正確方向?

創建一個Java GUI程序,其中包含一個按鈕,一個文本框和一個文本框。當用戶點擊按鈕時,系統應該彈出一個文件選擇窗口,它允許用戶從硬盤上選擇一個文件。選擇文件後,例如「ssn.txt」,你的程序應該讀取輸入文件「ssn.txt」。在文件中,每行代表一個社會安全號碼。 程序首先將所有的ssns讀入內存。如果文件中ssn的格式錯誤,程序應該拋出一個SSNException對象,並捕獲該Exception對象,並在文本框中顯示該行的錯誤消息。

下面是我的一些代碼:您有一個GUI和你的數據,你可能應該採取的MVC方法做一些

public class SSN_GUI extends JPanel implements ActionListener{ 

    public SSN_GUI(){ 

    makeObject(); 
    doTheLayout(); 
    theButton.addActionListener(this); 

    } 
    private JTextField inputSSN; 
    private JButton theButton; 

    //Make all the Objects 
    private void makeObject(){ 

     inputSSN = new JTextField(15); 
     inputSSN.setEditable(true); 
     theButton = new JButton(); 

     } 

    //Layout all the Objects 
    private void doTheLayout(){ 

     JPanel thePanel = new JPanel(); 
     thePanel.setLayout(new BorderLayout()); 
     thePanel.add(new JLabel("Enter Social Security Number: ")); 
     thePanel.add(inputSSN, "Center"); 
     thePanel.add(theButton, "North"); 
    } 

    // Handle the button push 
    public void actionPerformed(ActionEvent evt){ 
    } 


} 
+2

你應該試試[codereview.stackexchange.com](http://codereview.stackexchange.com/) –

+0

爲什麼你不試試看,然後看看有什麼不工作?如果你正在尋找代碼審查,你應該看看http://codereview.stackexchange.com/ – scrappedcola

+0

目前看起來不錯。您最終必須將其放入JFrame並使其在屏幕上可見。我認爲標題中的「問題」並不是指您遇到的任何特定問題,只是您正在爲您的課程編寫一些編程問題? –

回答

0

任何時候。因此,您可以將GUI事件處理和數據處理分爲兩個不同的類。

我會有一個擴展JFrame的類,它將負責顯示視圖。你的觀點(儘管不是最佳實踐)將創建一個新的模型類,它將有你的文件閱讀和驗證方法。

注意:您的問題陳述並未指出要使用的文本字段。

您應該有一個擴展Throwable的SSNException。你可以添加其他字段,但我只是添加一個字段來包含格式不正確的SSN作爲一個字符串。您還可以添加一個零參數構造函數來設置默認錯誤消息。

您可以創建一個模型類,負責迭代文件中的每一行並運行引發SSNException的驗證方法。驗證SSN的簡單方法是使用正則表達式。否則,您可以使用更原始的方法,例如逐字符驗證字符串。一個SSN只能以###-##-####的形式有9個數字(因此長度爲9個字符)。由於這種有效的SSN只能在位置0-2,4-5,7-10處具有數字0-9,而位置3和6處的字符是「 - 」。

如果您決定使用[String Reference].matches("\\d{3}-\\d{2}-\\d{4}")的正則表達式,則在方法簽名中使用驗證方法throws SSNException。當匹配方法返回false時,您可以在調用堆棧上拋出一個新的SSNException。

就存儲SSN的讀取而言,您可以使用ArrayList或創建自己的ArrayList類。如果輸入文件在文件頂部包含一個整數,那麼原型String[]數組就可以做得很好。假設數據文件具有簡單的數據結構,其中每行代表一個SSN,準備去Java庫進行文件讀取,包括java.util.Scannerjava.io.FileReader。因此,您可以使用new FileReader(filename)將其傳遞給掃描儀。使用一段時間.hasNextLine()循環。