Java не может писать в .txt - PullRequest
       16

Java не может писать в .txt

0 голосов
/ 04 января 2011

Привет, мне очень нужна твоя помощь, ну, у меня есть jframe с jcombobox и 3 текстовыми полями. Я хочу, чтобы все, что я пишу в текстовых полях, и выбор, который я делаю в комбинированном списке, был написан в .txt. Я пробовал так много вещей, ноничего, файл создается как Orders.txt, но остается пустым: S, это мой код, я ценю любую помощь. Спасибо:)

public class addSalesMan extends JFrame {
    private JComboBox namesJComboBox;
    private JTextField text1;//gia to poso
    private JTextField text2;//thn perigrafh
    private JTextField text3;//kai to numero ths paragelias kai ola auta tha egrafontai sto Orders.txt
    private JButton okJbutton;
    private String names[] = {"Basilis Komnhnos", "Iwanna Papadhmhtriou"};
   public String amount,name,description,number;

    public addSalesMan() {
        super("Προσθήκη παραγγελιών");
        setLayout(new FlowLayout());//dialegoume to flowlayout
//        TextFieldHandler handler = new TextFieldHandler(); writer.write(string);



            //ftiaxonoume to combobox gia tn epilogi tou onomatos
        namesJComboBox = new JComboBox(names);//orizmos JCOMBO BOX
        namesJComboBox.setMaximumRowCount(2);//na emfanizei 2 grammes
                     add(namesJComboBox);
             namesJComboBox.addItemListener(new ItemListener() {
            //xeirozome to simvan edw dhladh tn kataxwrisei ston fakelo         
           public void itemStateChanged(ItemEvent event) {
//prosdiorizoyme an eina epilegmeno to plaisio elegxou
                if (event.getStateChange() == ItemEvent.SELECTED) {                 

                            name = (names[namesJComboBox.getSelectedIndex()]);

//                            writer.newLine();             
                 setVisible(true);
            }
                 }
        });   //telos touComboBOx


        //dimioutgw pediou keimenou me 10 sthles gia thn kathe epilogh kai veveonomaste oti tha mporoume na ta epe3ergasoume kanontas ta editable

        text1 = new JTextField("Amount",10);
add(text1);
        text2 = new JTextField("Description",10);
add(text2);
        text3 = new JTextField("Order Number",10);
add(text3);

        TextFieldHandler handler = new TextFieldHandler();
        text1.addActionListener(handler);
        text2.addActionListener(handler);
        text3.addActionListener(handler);

        //private eswterikh clash gia ton xeirismo twn events twn text
//button kataxwrisis
 okJbutton=new JButton("Καταχώρηση");
 add(okJbutton);
 ButtonHandler bhandler=new ButtonHandler();
 okJbutton.addActionListener(bhandler);

    Order order=new Order(name,amount,description,number);
      Order.addOrders(name,amount,description,number);

    }
    private class ButtonHandler implements ActionListener{
        public void actionPerformed(ActionEvent bevent ){

             JOptionPane.showMessageDialog(addSalesMan.this,String.format("Η Καταχωρηση ήταν επιτυχής",bevent.getActionCommand()));


        }
    }
       private class TextFieldHandler implements ActionListener {
            //epe3ergasia twn simvantwn me kathe enter t xrhsth

            public void actionPerformed(ActionEvent evt) {
                String amount,description,number;
                amount=text1.getText();
                description=text2.getText();
                number=text3.getText();
                text1.selectAll();
                text2.selectAll();
                text3.selectAll();

              }
      if(evt.getSource()==text1 && evt.getSource()==text2 && evt.getSource()==text3){
        JOptionPane.showMessageDialog(addSalesMan.this,String.format("Η Καταχωρηση ήταν επιτυχής",evt.getActionCommand()));

           }
      }

//actionperformed telos
            //ean o xrhsths patisei enter sthn kathe epilogh antistixi kataxwrisi sto

            }


          public static void main(String args[]) {
       java.awt.EventQueue.invokeLater(new Runnable() {
    public void run() {
        new addSalesMan().setVisible(true);
            }
 });
      }
    }

Авторы находятся в другом классе.Вот соответствующий код:

public static void addOrders(String name,String amount,String description,String o_number){
    FileOutputStream fout;
    try {
        FileWriter fstream = new FileWriter("Orders.txt");
        if(name!=null){
            BufferedWriter out = new BufferedWriter(fstream);
            out.write(name);
            out.write(amount);
            out.write(description);
            out.write(o_number);
            out.write("\t\n");
            out.close();
        }
    } catch (IOException e) {
        System.err.println ("Unable to write to file");
        System.exit(-1);
    }
}

1 Ответ

1 голос
/ 04 января 2011

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

Вам может понадобиться очистить и закрыть модуль записи, когда пользователь закрывает ваш фрейм.

Добавьте следующее в конструктор вашего фрейма:

addWindowListener(new WindowAdapter(){
    public void windowClosing(WindowEvent e){
        writer.flush();
        writer.close();
    }
});

Приведенный выше код сбрасывает и закрывает устройство записи, когда пользователь закрывает кадр.

Ваш код неясен, поэтому я не уверен, где объявлена ​​переменная writer, я просто предполагаю, что это переменная уровня класса.

Кроме того, вам нужно открыть файл в режиме «добавления», если вы хотите добавлять строки в файл, а не перезаписывать его каждый раз. Это может быть достигнуто с помощью следующего:

new FileWriter(yourFilePath, true); // set append to true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...