Способ сохранить данные jList в текстовый файл?

Я ищу способ сохранить ввод пользователей из jlist в текстовый файл. Это для домашнего проекта. У меня есть программа, настроенная на ввод данных пользователем из текстового поля, а затем она попадает в список jlist, как только они нажимают кнопку «Добавить». В jlist есть модель списка по умолчанию, и мне интересно, есть ли способ создать кнопку сохранения и позволить ей сохранить весь jlist в файл .txt.

Кроме того, вот мой код:

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.DefaultListModel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.JList;
import javax.swing.border.LineBorder;

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;

import javax.swing.JComboBox;
import javax.swing.JProgressBar;
import javax.swing.JLabel;


public class i extends JFrame {

private JPanel contentPane;
private JTextField jTextField;
DefaultListModel ListModel = new DefaultListModel();
ArrayList<String> arr = new ArrayList <String>();
String str;
/**
 * Launch the application.
 */
public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                i frame = new i();
                frame.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

/**
 * Create the frame.
 */
public i() {
    super("List");

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100, 100, 450, 300);
    contentPane = new JPanel();
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    setContentPane(contentPane);
    contentPane.setLayout(null);

    jTextField = new JTextField();
    jTextField.setBounds(15, 80, 168, 20);
    contentPane.add(jTextField);
    jTextField.setColumns(10);

    final JList jList = new JList(ListModel);
    jList.setBorder(new LineBorder(new Color(0, 0, 0)));
    jList.setBounds(289, 54, 135, 197);
    contentPane.add(jList);


    JButton jButton = new JButton("Add");
    jButton.setBounds(190, 79, 89, 23);
    contentPane.add(jButton);
    jButton.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e) {
            String str=jTextField.getText();
            ListModel.addElement(str);
            jTextField.setText("");
            arr.add(str);
            System.out.println(arr);
        }
    });



    JButton delete = new JButton("DELETE");
    delete.setBounds(190, 162, 89, 23);
    contentPane.add(delete);
    delete.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent k){
            ListModel.removeElement(jList.getSelectedValue());

        }
    });

    JButton btnUp = new JButton("UP");
    btnUp.setBounds(190, 125, 89, 23);
    contentPane.add(btnUp);
    btnUp.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){
            int index = jList.getSelectedIndex();
            if(index == -1){
                JOptionPane.showMessageDialog(null, "Select something to move.");
            } else if(index > 0) {
                String temp = (String)ListModel.remove(index);
                ListModel.add(index - 1, temp);
                jList.setSelectedIndex(index -1);
            }
        }
    });

    JButton btnDown = new JButton("DOWN");
    btnDown.setBounds(190, 196, 89, 23);
    contentPane.add(btnDown);
    btnDown.addActionListener( new ActionListener(){ 
        public void actionPerformed( ActionEvent e ){ 
            int index = jList.getSelectedIndex(); 
            if( index == -1 ) 
                JOptionPane.showMessageDialog(null, "Select something to move."); 
            else if( index < ListModel.size() - 1 ){ 
                String temp = (String)ListModel.remove( index ); 
                ListModel.add( index + 1, temp ); 
                jList.setSelectedIndex( index + 1 ); 
            } 
        } 
    }); 

    JLabel lblItems = new JLabel("Items:");
    lblItems.setBounds(290, 37, 46, 14);
    contentPane.add(lblItems);

    JButton btnPrint = new JButton("PRINT");
    btnPrint.setBounds(190, 228, 89, 23);
    contentPane.add(btnPrint);
    btnPrint.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){

        }
    });
}
}

person engz    schedule 25.03.2014    source источник
comment
Этот вопрос слишком широк. Какая часть этого доставляет вам неприятности? Создать кнопку? Добавление ActionListener к кнопке? Получение данных из JList? Сохранение данных в текстовый файл? Что-то другое? что ты уже испробовал? Где находится ваш MCVE?   -  person Kevin Workman    schedule 25.03.2014
comment
@KevinWorkman Прошу прощения, мне трудно понять, как получить данные из jlist и записать их в текстовый файл. Я просмотрел другие веб-сайты и другие вопросы, и мне не повезло.   -  person engz    schedule 25.03.2014
comment
Разбейте свою проблему на более мелкие шаги. Можете ли вы написать отдельную программу, которая записывает некоторые жестко закодированные строки в файл? Можете ли вы написать другую автономную программу, которая выводит на консоль содержимое JList? Когда у вас обе программы работают по отдельности, то можно подумать об их объединении. Вам больше повезет, если вы опубликуете информацию о конкретном шаге, чем о своей цели в целом.   -  person Kevin Workman    schedule 25.03.2014
comment
Вы можете использовать PrintWriter(File arg0)   -  person Klemens Morbe    schedule 25.03.2014


Ответы (1)


вам нужно использовать класс File, чтобы сохранить список в этом

File file = new File("c:/test/myfile.txt");

теперь файл создан и открыт! и для записи вывода в файл

используйте класс форматирования:

public class CreateFile
{
   private Formatter x;
    void openFile()
    {
    try
    {
        x = new Formatter("c:/myfile.txt");
        System.out.println("you created a file");
    }
    catch(Exception e)
    {
        System.err.println("error in opening file");
    }
    }
    void addFile()
    {
        x.format("%s %s %s\n","20","Start","Today");
    }
    void closeFile()
    {
        x.close();
    }
}

как вы видите, метод addFile принимает 3 строки, переданные для записи в файл, который я передал «20», «Старт», «Сегодня», вы можете использовать больше/меньше, чем %s, и передать пользовательский ввод или список в String для записи в файл. удачи

person Mohammadreza Khatami    schedule 21.12.2014