2016-01-02 2 views
1

Я относительно новичок в java, и я пытаюсь создать программу, которая читает серию информации о разных песнях из txt-файла (позиция, название, художник, ярлык) и позволяет пользователю изменять файл непосредственно через JTextArea, содержащиеся в программе (после нажатия JButton). Я смог обеспечить правильное распознавание из программы всей различной информации, содержащейся в файле (на самом деле я могу вручную добавить больше песен без каких-либо проблем), но я не знаю, как разрешить пользователю изменять файл из JTextArea.Измените txt-файл с помощью JTextArea и JButton

Содержание файла:

1; X; Ширан; ASYLUM;

2; В ОДНОМ ЧАСЕ; САМ СМИТ; КАПИТОЛ;

3; НИКОГДА НЕ БЫЛИ ЛУЧШЕ, OLLY MURS; EPIC;

4; ЧЕТВЕРТЫЙ, ОДИН НАПРАВЛЕНИЕ, СИЗО МУЗЫКА;

5; ХОТЕЛ НА ВОЙДЖ, ДЖОРДЖ ЭЗРА; КОЛУМБИЯ;

CD Группа:

import java.io.*; 
import java.util.*; 
import javax.swing.*; 

public class CDPanel { 

private static String newLine = "\n"; 
public static CD myCD; 
public static JTextArea myTextArea = new JTextArea(15, 30); 

public static void main(String[] args) throws FileNotFoundException, IOException { 

    List<Integer> position = new ArrayList<>(); 
    List<String> title = new ArrayList<>(); 
    List<String> artist = new ArrayList<>(); 
    List<String> label = new ArrayList<>(); 

    JButton addCD = new JButton("Press to add the CD"); 

    JFrame frame = new JFrame("CD List"); 
    JPanel panel = new JPanel(); 

    int numberOfLines = 0; 

    BufferedReader br = new BufferedReader(new FileReader("cd.dat")); 
    String line = null; 
    while ((line = br.readLine()) != null) { 
     String data[] = line.split(";"); 

     for (int i=0; i<4; i++) { 
      if (i == 0) { 
       int value = Integer.parseInt(data[i]); 
       position.add(value); 
      } 

      if (i == 1) { 
       title.add(data[i]); 
      } 

      if (i == 2) { 
       artist.add(data[i]); 
      } 

      if (i == 3) { 
       label.add(data[i]); 
      } 
     } 
     numberOfLines++; 
    } 

    for (int i=0; i<numberOfLines; i++) { 
     myCD = new CD(position.get(i), title.get(i), artist.get(i), label.get(i)); 
     myTextArea.append(String.valueOf(myCD + newLine)); 
    } 
    panel.add(myTextArea); 
    panel.add(addCD); 
    frame.add(panel); 
    frame.setSize(30, 15); 
    frame.pack(); 
    frame.setVisible(true); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
} 
} 

CD:

public class CD { 

public int position; 
public String title, artist, label; 

public CD (int positionInit, String titleInit, String artistInit, String labelInit) { 
    position = positionInit; 
    title = titleInit; 
    artist = artistInit; 
    label = labelInit; 
} 

public String toString() { 
return position + ";" + title + ";" + artist + ";" + label + ";"; 
} 
} 

Заранее спасибо за помощь и извините, если мой код (и мой английский) не является совершенным, но опять же, я я новичок в этом мире, и я стараюсь как можно быстрее улучшить свои знания :)

+0

Возможно, вы захотите структурировать информацию в строках и столбцах в JTable или неструктурированном тексте в JTextArea. См. Этот [учебник] (https://docs.oracle.com/javase/tutorial/uiswing/components/table.html). – JasonM1

+0

Также может иметь смысл иметь один «Список» 'содержащий« строки »данных вместо отдельных списков для ваших« столбцов » –

+0

JTextArea имеет методы чтения/записи, но я согласен с JasonM1, JTable - лучший выбор – MadProgrammer

ответ

2

Вы должны использовать JTable или доверять пользователю, чтобы изменить его. n TextArea;

Добавить ActionListener в ваш JButton и использовать myTextArea.write() для записи в файл cd.dat.

JButton addCD = new JButton("Press to add the CD"); 
addCD.addActionListener(new ActionListener() { 

     @Override 
     public void actionPerformed(ActionEvent e) { 

      FileWriter fw = null; 
      try { 
       fw = new FileWriter("cd.dat"); 
       myTextArea.write(fw); 
      } catch (IOException e1) { 
       e1.printStackTrace(); 
      } finally { 
       try { 
        fw.close(); 
       } catch (IOException e1) { 
        e1.printStackTrace(); 
       } 
      } 
     } 
    }); 
Смежные вопросы