2014-09-01 2 views
-1

Я новичок в SO, я разработал форму в Java, я добавил три кнопки Отправить, Ясно и Показать запись. Мне нужно получить данные о событии отправки и передать его в txt-файл, и я хочу показать всю запись в событии клика кнопки show record. Мне нужно быстро исправить ваши люди, у меня заканчивается время. Вот мой код:Как читать и писать данные в текстовый файл в Java

import java.awt.*; //import older gui library for content pane 
import javax.swing.*; //import newer gui library for labels, textfields, and button 
import java.awt.event.*; //import gui event action library 
import javax.swing.JRadioButton; 

public class CustomerRecord extends JFrame implements ActionListener { 

    // declare labels used on GUI screen 
    private JLabel labelId, labelName, labelGender,labelcategory, labelPItem, labeldiscount; 
    private JLabel labelError, labelRegistration; 
    private JTextField textId, textName, textGender, textState, textcategory, textPItem, textdiscount; 
    // declare button used on GUI screen 
    private JButton submitButton, clearButton, readButton; 
    final JRadioButton jRadioMale = new JRadioButton("Male"); 
    final JRadioButton jRadioFemale = new JRadioButton("Female"); 
    // declare content pane 
    private Container contentPane; 

    public CustomerRecord() { 
     createGUI(); 
    } // ends constructor 

    private void createGUI() { 
     try { 
      // get content pane and set the layout to null 
      contentPane = getContentPane(); 
      contentPane.setLayout(null); //free-form layout 
      setFont(new Font("TimesRoman", Font.ITALIC, 14)); 

      // create the name label 
      labelId = new JLabel(); //instantiate new JLabel 
      labelId.setText("C.ID"); //set label text to name 
      labelId.setLocation(38, 10); //set location of JLabel 
      labelId.setSize(200, 25); //set size of JLabel 
      labelId.setForeground(Color.BLACK);//set initial background color 
      contentPane.add(labelId); //add JLabel to content pane 

      // create the name text box 
      textName = new JTextField(); //instantiate new JTextField 
      textName.setText(""); //clear JTextField 
      textName.setToolTipText("Please enter ID"); 
      textName.setLocation(75, 10); //set location of JTextFfield 
      textName.setSize(200, 25); //set size of JTextField 
      contentPane.add(textName); //add jextfield to content pane 

      // create the address label 
      labelName = new JLabel(); 
      labelName.setText("Name:"); 
      labelName.setLocation(23, 50); 
      labelName.setSize(80, 25); 
      labelName.setForeground(Color.BLACK); 
      contentPane.add(labelName); 

      // create the address text box 
      textName = new JTextField(); 
      textName.setText(""); 
      textName.setToolTipText("Please type in full name"); 
      textName.setLocation(75, 50); 
      textName.setSize(300, 25); 
      contentPane.add(textName); 
      labelGender = new JLabel(); 
      labelGender.setText("Gender"); 
      labelGender.setLocation(30, 90); 
      labelGender.setSize(300, 25); 
      labelGender.setForeground(Color.BLACK); 
      contentPane.add(labelGender); 
      textGender = new JTextField(); 
      textGender.setText(""); 
      textGender.setToolTipText("M/F"); 
      textGender.setLocation(75, 90); 
      textGender.setSize(130, 25); 
      contentPane.add(textGender); 
      labelcategory = new JLabel(); 
      labelcategory.setText("Category"); 
      labelcategory.setLocation(18, 170); 
      labelcategory.setSize(300, 25); 
      labelcategory.setForeground(Color.BLACK); 
      contentPane.add(labelcategory); 
      textcategory = new JTextField(); 
      textcategory.setText(""); 
      textcategory.setToolTipText("Item Type (Grocery)"); 
      textcategory.setLocation(75, 170); 
      textcategory.setSize(130, 25); 
      contentPane.add(textcategory); 
      labelPItem = new JLabel(); 
      labelPItem.setText("Total Item"); 
      labelPItem.setLocation(15, 210); 
      labelPItem.setSize(250, 25); 
      labelPItem.setForeground(Color.BLACK); 
      contentPane.add(labelPItem); 
      textPItem = new JTextField(); 
      textPItem.setText(""); 
      textPItem.setToolTipText("Purchased items must be between start with 1 or 70"); 
      textPItem.setLocation(75, 210); 
      textPItem.setSize(130, 25); 
      contentPane.add(textPItem); 
      labeldiscount = new JLabel(); 
      labeldiscount.setText("Discount"); 
      labeldiscount.setLocation(18, 250); 
      labeldiscount.setSize(300, 25); 
      labeldiscount.setForeground(Color.BLACK); 
      contentPane.add(labeldiscount); 
      textdiscount = new JTextField(); 
      textdiscount.setText(""); 
      textdiscount.setToolTipText("Entered Value must be containing ' % '"); 
      textdiscount.setLocation(75, 250); 
      textdiscount.setSize(130, 25); 
      contentPane.add(textdiscount); 
      submitButton = new JButton(); 
      submitButton.setText("Submit"); 
      submitButton.setToolTipText("Click \"submit \" when the form is completely filled out"); 
      submitButton.setLocation(125, 450); 
      submitButton.setSize(100, 30); 
      contentPane.add(submitButton); 
      submitButton.addActionListener(this); 
      readButton = new JButton(); 
      readButton.setText("Show Records"); 
      readButton.setToolTipText("Click Show Record if you want to check record"); 
      readButton.setLocation(225, 350); 
      readButton.setSize(200, 30); 
      contentPane.add(readButton); 
      readButton.addActionListener(this); 

      clearButton = new JButton(); 
      clearButton.setText("Clear"); 
      clearButton.setToolTipText("Click \"clear \" when you want to clear the form"); 
      clearButton.setLocation(250, 450); 
      clearButton.setSize(100, 30); 
      contentPane.add(clearButton); 
      clearButton.addActionListener(this); 

      // create the error label 
      labelError = new JLabel(); 
      labelError.setText("Please correct items in red"); 
      labelError.setLocation(150, 500); 
      labelError.setSize(190, 25); 
      labelError.setForeground(Color.RED); 
      labelError.setVisible(false); 
      contentPane.add(labelError); 

      // create the registration label 
      labelRegistration = new JLabel(); 
      labelRegistration.setText("Thank you for your entry."); 
      labelRegistration.setLocation(145, 500); 
      labelRegistration.setSize(190, 25); 
      labelRegistration.setForeground(Color.BLACK); 
      labelRegistration.setVisible(false); 
      contentPane.add(labelRegistration); 

      setTitle("Customer Form"); //set window title 
      setSize(475, 600); //set window size 
      setVisible(true); 
     } catch (Exception e) { 
     } 
    }// ends creatGUI method. 

    public static void main(String args[]) { 
     CustomerRecord application = new CustomerRecord(); 
     application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    }// ends main 

    public void actionPerformed(ActionEvent event) { 
     try { 
      if (event.getActionCommand().equals("Submit")) { 

       if (checkID() & checkName() & checkGender() & check() & checkPItem() & checkdiscount()) { 
        labelRegistration.setVisible(true); 
        labelError.setVisible(false);  
        submitButton.removeActionListener(this); 
        clearButton.removeActionListener(this); 
       } else { 
        labelError.setVisible(true); 
        labelRegistration.setVisible(false); 
       } 
      } if (event.getActionCommand().equals("Clear")) 
       { 
       textName.setText(""); 
       textName.setText(""); 
       textGender.setText(""); 
       textState.setText(""); 
       textcategory.setText(""); 
       textPItem.setText(""); 
       textdiscount.setText(""); 

       labelError.setVisible(false); 
       labelRegistration.setVisible(false); 
       labelId.setForeground(Color.BLACK); 
       labelName.setForeground(Color.BLACK); 
       labelGender.setForeground(Color.BLACK); 
       labelcategory.setForeground(Color.BLACK); 
       labelPItem.setForeground(Color.BLACK); 
       labeldiscount.setForeground(Color.BLACK); 

      } 
     } catch (Exception e) { } 
    } 
    private boolean checkID() { 
     if (textName.getText().length() == 0) { 
      labelId.setForeground(Color.RED); //name is not correct 
      return false; 
     } else { 
      labelId.setForeground(Color.BLACK); //name is correct 
      return true; 
     } 
    } 
    private boolean checkName() { 
     if (textName.getText().length() < 5) { 
      labelName.setForeground(Color.RED); 
      return false; 
     } else { 
      labelName.setForeground(Color.BLACK); 
      return true; 
     } 
    } 

    private boolean checkGender() { 
     if (textGender.getText().length() == 0) { 
      labelGender.setForeground(Color.RED); 
      return false; 
     } else { 
      labelGender.setForeground(Color.BLACK); 
      return true; 
     } 
    } 
    private boolean check() { 
     try { 

      if (textcategory.getText().length() == 5) { 
       labelcategory.setForeground(Color.BLACK); 
       return true; 
      } else { 
       labelcategory.setForeground(Color.RED); 
       return false; 
      } 
     } catch (Exception e) { 
      labelcategory.setForeground(Color.RED);  
      return false; 
     } 
    } 
    private boolean checkPItem() { 

      if (textPItem.getText().startsWith("1") || textPItem.getText().startsWith("70")) 
      { 
       labelPItem.setForeground(Color.BLACK); 
       return true; 
      } else { 
       labelPItem.setForeground(Color.RED);  
       return false; 
      }  
    } 
    private boolean checkdiscount() { 
     if (textdiscount.getText().contains("%")) 
     { 
      labeldiscount.setForeground(Color.BLACK); 
       return true; 
     } else 
     { 
      labeldiscount.setForeground(Color.RED); 
       return false; 
     } 
    } 
} 
+0

Лучшая вещь для начала - это разделение вашего кода. В идеале у вас будет код для обработки файлов txt (чтение, запись, ...) на отдельном уровне, но, по крайней мере, в другом классе java. Это облегчит чтение, не говоря уже о тестировании. Вы также сможете модулизовать тестирование класса, не заставляя также учитывать пользовательский интерфейс. также: остерегайтесь такого кода: catch (Exception e) {} скрытие исключений (особенно во время разработки) - это самое худшее, что вы можете сделать. – Stultuske

+0

Исследуйте пакет 'java.io'. –

+0

ссылайтесь на это http://www.tutorialspoint.com/java/java_files_io.htm –

ответ

0

Перед тем, как дать ответ исправил некоторые коды вы ошибочно сделали.

Проверьте местонахождение, в котором я исправил.

Ваш код:

// create the name text box 
     textName = new JTextField(); //instantiate new JTextField 
     textName.setText(""); //clear JTextField 
     textName.setToolTipText("Please enter ID"); 
     textName.setLocation(75, 10); //set location of JTextFfield 
     textName.setSize(200, 25); //set size of JTextField 
     contentPane.add(textName); //add jextfield to content pane 

Модифицированный код:

// create the name text box 
     textId = new JTextField(); //instantiate new JTextField 
     textId.setText(""); //clear JTextField 
     textId.setToolTipText("Please enter ID"); 
     textId.setLocation(75, 10); //set location of JTextFfield 
     textId.setSize(200, 25); //set size of JTextField 
     contentPane.add(textId); //add jextfield to content pane 

========================== == Тогда я определил новые два метода для файла для чтения и для записи в файл

Это Запись в файл

 private void writeToFile(String list) throws IOException{ 
/// 
       File f = new File("E:\\test1.txt"); 
       System.out.println(f); 
       FileWriter fw = new FileWriter(f,true); 
       System.out.println(fw); 
       try{ 
        BufferedWriter bw = new BufferedWriter(fw); 
        System.out.println(bw); 
        bw.newLine(); 
        bw.write(list); 
        bw.flush(); 
        bw.close(); 
       } 
       catch(Exception e){ 
        System.out.println(e); 
       } 
       /// 
} 

Это чтение файла

частная пустота ReadFile() {

 File f = new File("E:\\test1.txt"); 
try{ 
     FileReader fr = new FileReader(f); 
     BufferedReader br = new BufferedReader(fr); 
     while(br.ready()){ 
     System.out.println(br.readLine()); 
     } 
}catch(Exception e){ 
    System.out.println(e); 
} 
} 

Затем добавляют новое, если заявление в стороне actionPerforemed (ActionEvent е) для обработки события от «Показать Records» Button, где у вас есть не добавил. в стороне это я называю ReadFile(), который будет печатать все строки из чтения файла. (Этот файл чтение такой же файл, в котором вы собираетесь писать.)

  //Newly added event for Show Records button. 

     if (event.getActionCommand().equals("Show Records")) { 
      readFile(); 
     } 

Тогда в стороне actionPerforemed (ActionEvent е) и в инструкции if, связанной с кнопкой отправки

Добавлен следующий код.

public void actionPerformed(ActionEvent event) { 
    try { 
     if (event.getActionCommand().equals("Submit")) { 

      if (checkID() & checkName() & checkGender() & check() & checkPItem() & checkdiscount()) { 
       labelRegistration.setVisible(true); 
       labelError.setVisible(false); 
       //concatnating the collected data to be written. 
       String toBewrite = textId.getText() + "," + textName.getText(); 
       toBewrite = toBewrite + "," + textGender.getText() + "," + textcategory.getText(); 
       toBewrite = toBewrite + "," + textPItem.getText() + "," + textdiscount.getText(); 
       ///calling the writeToFile method where the relavent data to be updated to the file. 
       writeToFile(toBewrite); 
       //// 
       submitButton.removeActionListener(this); 
       clearButton.removeActionListener(this); 
      } else { 
       labelError.setVisible(true); 
       labelRegistration.setVisible(false); 
      } 
     } 
     if (event.getActionCommand().equals("Clear")) { 
      textName.setText(""); 
      textName.setText(""); 
      textGender.setText(""); 
      textState.setText(""); 
      textcategory.setText(""); 
      textPItem.setText(""); 
      textdiscount.setText(""); 

      labelError.setVisible(false); 
      labelRegistration.setVisible(false); 
      labelId.setForeground(Color.BLACK); 
      labelName.setForeground(Color.BLACK); 
      labelGender.setForeground(Color.BLACK); 
      labelcategory.setForeground(Color.BLACK); 
      labelPItem.setForeground(Color.BLACK); 
      labeldiscount.setForeground(Color.BLACK); 

     } 
     //Newly added event for Show Records button. 
     if (event.getActionCommand().equals("Show Records")) { 
      readFile(); 
     } 
    } catch (Exception e) { 
    } 
} 
1

Прежде всего позвольте мне указать на ошибочный (но не смертельный) дизайн. Все ваши методы checkXxx() обрабатывают получение текста из полей. Я бы изменил их, чтобы принять строки в качестве аргументов. Причина в том, что вам понадобятся эти значения String из текстовых полей в области actionPerformed, чтобы сохранить их в текстовом файле.

Мне нужно получить данные о отправить событие и передать его в текстовый файл

Вы должны использовать FileWriter и использовать этот конструктор

public FileWriter(String fileName, boolean append) throws IOException -
конструирует FileWriter объект с именем файла с логическим значением, указывающим, следует ли добавлять записанные данные.

, который позволит вам добавить к файлу один из его методов append.

и я хочу, чтобы показать всю запись по событию шоу кнопка записи клик

Не уверен, если вы имеете в виду вы хотите прочитать все записи или чтения одной записи, имени или что-то. Для первого текстовые компоненты имеют метод read() для чтения всего документа на текстовый компонент (например, текстовую область). Для последнего вам нужно будет читать строки за строкой и проверить, соответствует ли какая-то часть строки данным, которые вы хотите сопоставить. Это основной материал. Вы можете прочитать больше на Basic I/O. Например, что-то вроде (предполагается, что ваши записи/строки, разделенные запятыми):

BufferedReader reader = new Bufferedreader(new FileReader(new File("file"))); 
String line = null; 
while ((line = reader.readLine()) != null) { 
    String[] tokens = line.split(","); 
    String firstName = tokens[0].trim(); 
    if (firstName.equals(firstNameFieldtext)) { 
     // use the tokens to populate the fields. 
     break; 
    } 
} 
reader.close(); 

Приведенный выше код просто считывает построчно, разделив каждую строку в массив. Он проверяет первый токен, чтобы узнать, соответствует ли имя значению поля. Если это так, то вы можете использовать значения из массива для заполнения полей.

Если вы хотите, чтобы прочитать весь файл на текстовую область, вы могли бы просто пройти ту же BufferedReader методы read как textArea.read(reader, null);

Смежные вопросы