2011-03-25 56 views
0

現在我有一個GUI,當我點擊添加客戶時彈出一個框,我可以輸入名稱,地址等信息。完成此操作後,單擊添加客戶,並將信息添加到.txt文件。現在在原始的GUI中有一個「刷新」按鈕,當它被按下時,它將信息輸入到名爲「NameTextCustomers」的文本框中。它不這樣做。我已經研究了幾個小時,試圖找出答案。我在代碼中有一行說:「NameTextCustomers.setText(」文件信息在這裏「);」我點擊刷新按鈕後,出現「文件信息在這裏」字樣,以便部分工作。我假設代碼將被插入那裏。我認爲這是我必須爲我的代碼按照我希望的方式工作而做的最後一部分。鏈接輸入的文本信息

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

import java.awt.event.*; 
import java.util.*; 
import java.io.*; 
import java.util.List; 

public class FVolume extends JFrame implements ActionListener{ 
    private JTabbedPane jtabbedPane; 

    private JPanel Customers; 

    private List<Customer> customers = new ArrayList<Customer>(); 
    JTextArea NameTextCustomers, ExistTextCustomers, NameTextContractors, ExistTextContractors; 
    JTextField lengthTextPool, widthTextPool, depthTextPool, volumeTextPool; 

    public FVolume(){ 
     setTitle("Volume Calculator"); 
     setSize (300, 200); 

     JPanel topPanel = new JPanel(); 
     topPanel.setLayout(new BorderLayout()); 
     getContentPane().add(topPanel); 

     createCustomers(); 

     jtabbedPane = new JTabbedPane(); 

     jtabbedPane.addTab("Customer", Customers); 

     topPanel.add(jtabbedPane, BorderLayout.CENTER); 
    } 

     /*  CREATE CUSTOMERS */ 

    public JPanel createCustomers(){ 
     Customers = new JPanel(); 
     Customers.setLayout(null); 

     NameTextCustomers = new JTextArea("Select Add Customer to Add Customer.  Select Refresh to Refresh This Pane."); 
     NameTextCustomers.setLineWrap(true); 
     NameTextCustomers.setBounds(10, 10, 390, 150); 
     Customers.add(NameTextCustomers); 

     JButton Exit = new JButton("Exit"); 
     Exit.setBounds(30,170,80,20); 
     Exit.addActionListener(this); 
     Exit.setBackground(Color.white); 
     Customers.add(Exit); 

     JButton AddCustomers = new JButton("Add Customer"); 
     AddCustomers.setBounds(130,170,120,20); 
     AddCustomers.setBackground(Color.white); 
     Customers.add(AddCustomers); 

     JButton Refresh = new JButton("Refresh"); 
     Refresh.setBounds(260,170,80,20); 
     Refresh.setBackground(Color.white); 
     Customers.add(Refresh); 

     ExistTextCustomers = new JTextArea(); 
     ExistTextCustomers.setBounds(10, 200, 390, 60); 
     ExistTextCustomers.setLineWrap(true); 
     Customers.add(ExistTextCustomers); 

     final JTextArea custArea = new JTextArea(6, 30); 
     final JTextArea ExistTextCustomers; 

     ExistTextCustomers = new JTextArea(2, 30); 
     ExistTextCustomers.setLineWrap(true); 
     ExistTextCustomers.setWrapStyleWord(true); 

     AddCustomers.addActionListener(new ActionListener() 
     { 
      public void actionPerformed(ActionEvent e) 
      { 
      Customers.add(new Customer("Customer")); 
     } 
      }); 

     Customers.add(custArea); 
     Customers.add(AddCustomers); 

     Customers.add(Refresh); 
     Refresh.setMnemonic('R'); 

     Refresh.addActionListener(new ActionListener() 
     { 
      public void actionPerformed(ActionEvent e) 
      { 
       NameTextCustomers.setText ("File Info Here"); 
     try 
     { 
      File custOpen = new File("customer.txt"); 
      FileReader custAreaIn = new FileReader(custOpen); 
      custArea.read(custAreaIn, custOpen.getAbsolutePath()); 
      ExistTextCustomers.setText("File exists and can be read."); 
     } 
     catch (IOException e3){ 
      ExistTextCustomers.setText("The file could not be read." + e3.getMessage()); 
      } 
     } 
    } 
    ); 
     return Customers; 
} 
class Customer extends JFrame 
{ 
    private String[] states = {"AL", "AK", "AZ", "AR", "CA", "CO", "CT", "DE", 
      "FL", "GA", "HI", "ID", "IL", "IN", "IA", "KS", "KY", "LA", "ME", 
      "MD", "MA", "MI", "MN", "MS", "MO", "MT", "NE", "NV", "NH", "NJ", 
      "NM", "NY", "NC", "ND", "OH", "OK", "OR", "PA", "RI", "SC", "SD", 
      "TN", "TX", "UT", "VT", "VA", "WA", "WV", "WI", "WY"}; 
      private JComboBox StateList = new JComboBox(states); 
      private JTextField NameText = new JTextField(25); 
      private JTextField AddressText = new JTextField(25); 
      private JTextField CityText = new JTextField(25); 
      private JTextField ZipText = new JTextField(9); 
      private JTextField PhoneText = new JTextField(10); 
      private JTextField ExistTextCustomers = new JTextField(30); 
      private static final long serialVersionUID = 1L; 

      private AddCustButtonHandler addCusHandler = new AddCustButtonHandler(); 

      public Customer(String who) 
      { 
       popUpWindow (who); 
      } 
      public void popUpWindow(final String who) { 
       final JFrame popWindow; 
       popWindow = new JFrame(who); 
       popWindow.setSize(425, 350); 
       popWindow.setLocation(100, 100); 
       popWindow.setVisible(true); 
       setDefaultCloseOperation(EXIT_ON_CLOSE); 

       Container c = new Container(); 

       popWindow.add(c); 

       c.setLayout(new FlowLayout()); 

       JPanel one = new JPanel(); 
       JPanel two = new JPanel(); 
       JPanel three = new JPanel(); 
       JPanel four = new JPanel(); 
       JPanel five = new JPanel(); 
       JPanel six = new JPanel(); 

       one.add(new JLabel(who + " Name ")); 
       one.add(NameText); 
       two.add(new JLabel("Address ")); 
       two.add(AddressText); 
       three.add(new JLabel("City ")); 
       three.add(CityText); 
       four.add(new JLabel("State ")); 
       StateList.setSelectedIndex(0); 
       four.add(StateList); 
       four.add(new JLabel("ZIP")); 
       four.add(ZipText); 
       four.add(new JLabel("Phone")); 
       four.add(PhoneText); 
       JButton addwho = new JButton("Add " + who); 
       addwho.setMnemonic('A'); 
       JButton close = new JButton("Exit"); 
       close.setMnemonic('C'); 
       JButton deleteFile = new JButton("Delete File"); 
       deleteFile.setMnemonic('D'); 
       five.add(addwho); 
       five.add(close); 
       five.add(deleteFile); 
       ExistTextCustomers.setEditable(false); 
       ExistTextCustomers.setHorizontalAlignment(JTextField.CENTER); 

       six.add(ExistTextCustomers); 
       c.add(one); 
       c.add(two); 
       c.add(three); 
       c.add(four); 
       c.add(five); 
       c.add(six); 

       deleteFile.setToolTipText("Delete File"); 
       addwho.setToolTipText("Add "+ who); 
       close.setToolTipText("Exit"); 

       if (who == "Customer") 
        addwho.addActionListener(addCusHandler); 
       close.addActionListener(new ActionListener() { 
        public void actionPerformed(ActionEvent e) { 
         NameText.setText(""); 
         AddressText.setText(""); 
         CityText.setText(""); 
         ZipText.setText(""); 
         PhoneText.setText(""); 
         ExistTextCustomers.setText(""); 
         popWindow.dispose(); 
        } 
       } 
       ); 
       deleteFile.addActionListener(new ActionListener() { 
        public void actionPerformed(ActionEvent e) { 
         ExistTextCustomers.setText(""); 
         if (who.equals("Customer")) { 
          File file = new File("Customer.txt"); 
          boolean cusFileDeleted = file.delete(); 
          if (cusFileDeleted) { 
           ExistTextCustomers 
           .setText("Customer file has been deleted"); 
          } else { 
           ExistTextCustomers 
           .setText("There was an error in deleting file"); 
          } 
          } 
         } 
        } 
       ); 
      } 
      class AddCustButtonHandler implements ActionListener { 
       public void actionPerformed(ActionEvent addCusHandler) { 
        int StateIndex; 
        try { 
         File file = new File("Customer.txt"); 
         boolean success = file.createNewFile(); 
         if (success) { 
          ExistTextCustomers 
          .setText("Customer.txt file created file added"); 
         } else if (file.canWrite()) { 
          ExistTextCustomers 
          .setText("Writing data to Customer.txt, file added"); 
         } else { 
          ExistTextCustomers.setText("Cannot create file: Customer.txt"); 
         } 
         try { 
          FileWriter fileW = new FileWriter("Customer.txt", true); 
          fileW.write(NameText.getText()); 
          fileW.write(","); 
          fileW.write(AddressText.getText()); 
          fileW.write(","); 
          fileW.write(CityText.getText()); 
          fileW.write(","); 
          StateIndex = StateList.getSelectedIndex(); 
          fileW.write(states[StateIndex]); 
          fileW.write(","); 
          fileW.write(ZipText.getText()); 
          fileW.write(","); 
          fileW.write(PhoneText.getText()); 
          fileW.write("\r\n"); 
          fileW.close(); 
          ExistTextCustomers.setText("A new Customer has been added!"); 
          FileReader fileR = new FileReader("Customer.txt"); 
          BufferedReader buffIn = new BufferedReader(fileR); 
          String textData = buffIn.readLine(); 
          buffIn.close(); 

         } 
         catch (IOException e1) { 
          JOptionPane.showMessageDialog(null, e1.getMessage(), "ERROR", 2); 
         } 
         NameText.setText(""); 
         AddressText.setText(""); 
         CityText.setText(""); 
         ZipText.setText(""); 
         PhoneText.setText(""); 
         } 
        catch (IOException e1) { 
        } 

       } 
      } 
      public void actionPerformed(ActionEvent event){ 
      } 
       private void Exit_pressed(){ 
        System.exit(0); 
       } 
      } 


       public static void main(String[] args){ 
        JFrame frame = new FVolume(); 
        frame.setSize(420, 350); 
        frame.setVisible(true); 
    } 

       public void actionPerformed(ActionEvent e) { 


       } 

} 

Flow of events

點擊刷新按鈕後,就應該輸入信息到文本框中。

回答

1

好的,找出你的代碼的問題。花了一些時間,但它並不複雜。 但首先,不要太超過一個類文件,這是一個不好的做法(並使其更難通過你的代碼。

的問題是,你按下後,「添加負荷消費」 「客戶」窗口中,你需要將這些數據發送到應用程序主窗口。該怎麼做?

添加FVolume parent;customer類和改變Customer類的構造函數接收不僅是一個字符串,而是一個目標FVolume:

public Customer(String who, FVolume _parent) 
    { 
     popUpWindow (who); 
     parent = _parent; 
    } 

您可以訪問m來自客戶的窗口。 現在你需要能夠改變的NameTextCustomers的文字,所以創建FVolume類的新方法,它允許將其從外部改變:

public void setField(String str) 
    { 
     NameTextCustomers.setText(str); 
     NameTextCustomers.validate(); 
    } 

接下來的事情會調用這個方法,當有人按「添加客戶「窗口中的」客戶「。你已經有了一個監聽器,但是我們稍微改變它的actionPerformed方法,這樣它不僅將字符串保存到你的文件中,而且還將它設置爲NameTextCustomers。 (我沒有把方法的最後幾行,但沒有改變)

public void actionPerformed(ActionEvent addCusHandler) { 
    int StateIndex; 
    try { 
     File file = new File("Customer.txt"); 
     StringBuilder sb = new StringBuilder(); 
     boolean success = file.createNewFile(); 
     if (success) { 
      ExistTextCustomers 
      .setText("Customer.txt file created file added"); 
     } else if (file.canWrite()) { 
      ExistTextCustomers 
      .setText("Writing data to Customer.txt, file added"); 
     } else { 
      ExistTextCustomers.setText("Cannot create file: Customer.txt"); 
     } 
     try { 
      FileWriter fileW = new FileWriter("Customer.txt", true); 
      sb.append(NameText.getText()); 
      sb.append(","); 
      sb.append(AddressText.getText()); 
      sb.append(","); 
      sb.append(CityText.getText()); 
      sb.append(","); 
      StateIndex = StateList.getSelectedIndex(); 
      sb.append(states[StateIndex]); 
      sb.append(","); 
      sb.append(ZipText.getText()); 
      sb.append(","); 
      sb.append(PhoneText.getText()); 
      sb.append("\r\n"); 
      fileW.write(sb.toString()); 
      parent.setField(sb.toString()); 
      fileW.close(); 
      ExistTextCustomers.setText("A new Customer has been added!"); 
      FileReader fileR = new FileReader("Customer.txt"); 
      BufferedReader buffIn = new BufferedReader(fileR); 
      String textData = buffIn.readLine(); 
      buffIn.close(); 

唯一剩下的問題是關係到Customer對象的構造。我們需要將FVolume對象添加到構造,但我們不應該將它添加到costumers面板,因爲它是一個不同的幀:

AddCustomers.addActionListener(new ActionListener() 
     { 
      public void actionPerformed(ActionEvent e) 
      { 
      new Customer("Customer", FVolume.this); 
     } 
    }); 

這隻會使它工作,我想只有當觸及代碼這是絕對必要的,我沒有試圖改變編碼風格。

+0

@MByD:我試過了,但沒有奏效。 – Mike 2011-03-25 12:25:31

+0

不確定它是相關的,但行if(who ==「Customer」)'是錯誤的。你應該這樣寫:'if(who.equals(「Customer」))。 – MByD 2011-03-25 12:35:18

+0

@MByD:對不起,我也試過,沒有運氣。 – Mike 2011-03-25 12:40:03