YauhenMardan

Untitled

May 27th, 2019
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.77 KB | None | 0 0
  1. package com.company;
  2.  
  3. import javax.swing.*;
  4. import javax.swing.filechooser.FileNameExtensionFilter;
  5. import javax.swing.table.DefaultTableModel;
  6. import javax.xml.parsers.DocumentBuilder;
  7. import javax.xml.parsers.DocumentBuilderFactory;
  8. import java.awt.*;
  9. import java.awt.event.ActionEvent;
  10. import java.awt.event.ActionListener;
  11. import java.io.File;
  12. import java.io.FileNotFoundException;
  13. import java.io.FileWriter;
  14. import java.io.IOException;
  15. import java.util.*;
  16. import org.w3c.dom.*;
  17. import org.xml.sax.SAXException;
  18.  
  19. import javax.xml.parsers.*;
  20.  
  21. public class WindowApp extends JFrame {
  22. private final static int LIST_X = 300;
  23. private final static int LIST_Y = 500;
  24. public static final Object[] tableHeader = new String[]{"ID","Surname","Course","Group","City"};
  25.  
  26. JMenu menu;
  27. JMenu menuStudents;
  28. JMenuBar menuBar;
  29. JMenuItem menuItem1;
  30. JMenuItem menuItem2;
  31. JMenuItem menuItem3;
  32. JMenuItem menuItem4;
  33. JMenuItem menuItem5;
  34.  
  35. JScrollPane scrollPane;
  36.  
  37. JPanel mainPanel;
  38. JPanel northPanel;
  39. JButton addDataButton;
  40. JButton chooseFileButton;
  41. JButton sortButton;
  42.  
  43. JTable table;
  44.  
  45. public ArrayList<Student> getModelStudents() {
  46. return studentArrayList;
  47. }
  48.  
  49. ArrayList<Student> studentArrayList;
  50.  
  51. WindowApp() {
  52. //panel
  53. mainPanel = new JPanel();
  54. mainPanel.setLayout(new BorderLayout());
  55. //buttons
  56. addDataButton = new JButton("Add new students...");
  57. chooseFileButton = new JButton("Choose text file...");
  58. sortButton = new JButton("Sort");
  59. addDataButton.setPreferredSize(new Dimension(LIST_X, 20));
  60. sortButton.setPreferredSize(new Dimension(LIST_X, 20));
  61. //
  62. northPanel = new JPanel();
  63. northPanel.add(addDataButton, BorderLayout.WEST);
  64. //mainPanel.add(chooseFileButton, BorderLayout.SOUTH);
  65. northPanel.add(sortButton, BorderLayout.EAST);
  66. mainPanel.add(northPanel, BorderLayout.NORTH);
  67. //model
  68. studentArrayList = new ArrayList<>();
  69. //table
  70. table = new JTable();
  71. table.setPreferredSize(new Dimension(2*LIST_X, LIST_Y));
  72. scrollPane = new JScrollPane(table);
  73. scrollPane.setPreferredSize(new Dimension(2*LIST_X, LIST_Y));
  74. table.setFillsViewportHeight(true);
  75. mainPanel.add(scrollPane, BorderLayout.CENTER);
  76. //add header
  77. DefaultTableModel model = new DefaultTableModel(tableHeader,0);
  78. table.setModel(model);
  79. //menu bar
  80. menuBar = new JMenuBar();
  81. menu = new JMenu("File");
  82. menuStudents = new JMenu(("Students"));
  83. menuItem1 = new JMenuItem("Add student...");
  84. menuItem2 = new JMenuItem("Open text file...");
  85. menuItem3 = new JMenuItem("Sort");
  86. menuItem4 = new JMenuItem("Save as XML file...");
  87. menuItem5 = new JMenuItem("Open XML file...");
  88. menuStudents.add(menuItem3);
  89. menuStudents.add(menuItem1);
  90. menu.add(menuItem2);
  91. menu.add(menuItem5);
  92. menu.addSeparator();
  93. menu.add(menuItem4);
  94. menuBar.add(menu);
  95. menuBar.add(menuStudents);
  96. setJMenuBar(menuBar);
  97.  
  98. //window
  99. setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
  100. setResizable(false);
  101. setContentPane(mainPanel);
  102. pack();
  103. //listeners
  104. addDataButton.addActionListener(new AddDataListener());
  105. chooseFileButton.addActionListener(new ChooseFileListener());
  106. menuItem1.addActionListener(new AddDataListener());
  107. menuItem2.addActionListener(new ChooseFileListener());
  108. menuItem4.addActionListener(new ActionListener() {
  109. @Override
  110. public void actionPerformed(ActionEvent e) {
  111. JFileChooser fileChooser = new JFileChooser();
  112. if (fileChooser.showSaveDialog(null) == JFileChooser.APPROVE_OPTION) {
  113. File file = fileChooser.getSelectedFile();
  114. try {
  115. writeToXMLFile(file);
  116. }
  117. catch (IOException exception){
  118.  
  119. }
  120. }
  121. }
  122. });
  123. menuItem5.addActionListener(new ActionListener() {
  124. @Override
  125. public void actionPerformed(ActionEvent e) {
  126. //parse xml file (DOM)
  127. JFileChooser fileOpen = new JFileChooser();
  128. int ret = fileOpen.showOpenDialog(null);
  129. if (ret == JFileChooser.APPROVE_OPTION) {
  130. try {
  131. studentArrayList=new ArrayList<>();
  132. DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
  133. DocumentBuilder builder = factory.newDocumentBuilder();
  134. File file=fileOpen.getSelectedFile();
  135. Document document = builder.parse(file);
  136.  
  137. NodeList studentElements = document
  138. .getDocumentElement()
  139. .getElementsByTagName("student");
  140.  
  141. for (int i = 0; i < studentElements.getLength(); i++) {
  142. Node student = studentElements.item(i);
  143. if (student.getNodeType() == Node.ELEMENT_NODE) {
  144. Element element = (Element) student;
  145. int recBookNum = Integer.parseInt(element.getAttribute("id"));
  146. String surname =
  147. element
  148. .getElementsByTagName("surname")
  149. .item(0)
  150. .getTextContent();
  151. int course = Integer.parseInt(
  152. element
  153. .getElementsByTagName("course")
  154. .item(0)
  155. .getTextContent());
  156. int group = Integer.parseInt(
  157. element
  158. .getElementsByTagName("group")
  159. .item(0)
  160. .getTextContent());
  161. String city= element.getAttribute("city");
  162. studentArrayList.add(new Student(recBookNum,surname,course,group,city));
  163.  
  164. }
  165. }
  166. updateList();
  167. }
  168. catch (ParserConfigurationException exception){
  169. JOptionPane.showMessageDialog(WindowApp.this,
  170. "Parser error.",
  171. "Inane warning",
  172. JOptionPane.WARNING_MESSAGE);
  173. }
  174. catch (SAXException exception){
  175. JOptionPane.showMessageDialog(WindowApp.this,
  176. "SAX error.",
  177. "Inane warning",
  178. JOptionPane.WARNING_MESSAGE);
  179. }
  180. catch (IOException exception){
  181. JOptionPane.showMessageDialog(WindowApp.this,
  182. "Cannot open the file.",
  183. "Inane warning",
  184. JOptionPane.WARNING_MESSAGE);
  185. }
  186. }
  187. }
  188. });
  189. }
  190.  
  191. public void updateList() {
  192. DefaultTableModel model = new DefaultTableModel(tableHeader,0);
  193. Iterator<Student> iterator = studentArrayList.iterator();
  194. Student student;
  195. while (iterator.hasNext()) {
  196. student=iterator.next();
  197. model.addRow(new Object[]{student.getRecBookNum(),student.getSurname(),student.getCourse(),student.getGroup(),student.getCity()});
  198. }
  199. table.setModel(model);
  200. }
  201.  
  202.  
  203. public void writeToXMLFile(File file) throws IOException {
  204. file.createNewFile();
  205. FileWriter writer=new FileWriter(file);
  206. writer.write(this.toXMLString());
  207. writer.flush();
  208. writer.close();
  209. }
  210.  
  211. public String toXMLString(){
  212. StringBuffer resultXML=new StringBuffer();
  213. resultXML.append("<students>\n");
  214. Iterator<Student> iterator = studentArrayList.iterator();
  215. while (iterator.hasNext()){
  216. resultXML.append(iterator.next().toXMLString());
  217. }
  218. resultXML.append("</students>\n");
  219. return resultXML.toString();
  220. }
  221.  
  222. class ChooseFileListener implements ActionListener {
  223. public void actionPerformed(ActionEvent e) {
  224. JFileChooser fileOpen = new JFileChooser();
  225. FileNameExtensionFilter filter = new FileNameExtensionFilter(
  226. "TXT files", "txt");
  227. fileOpen.setFileFilter(filter);
  228. int ret = fileOpen.showOpenDialog(null);
  229. if (ret == JFileChooser.APPROVE_OPTION) {
  230. try {
  231. studentArrayList=new ArrayList<>();
  232. int recBookNum;
  233. String surname;
  234. int course;
  235. int group;
  236. String city;
  237. Scanner scanner = new Scanner(fileOpen.getSelectedFile());
  238. while (scanner.hasNext()) {
  239. recBookNum = scanner.nextInt();
  240. surname = scanner.next();
  241. course = scanner.nextInt();
  242. group = scanner.nextInt();
  243. city = scanner.next();
  244. studentArrayList.add(new Student(recBookNum, surname, course, group,city));
  245. updateList();
  246. }
  247. } catch (FileNotFoundException exception) {
  248. JOptionPane.showMessageDialog(WindowApp.this,
  249. "Cannot open the file.",
  250. "Inane warning",
  251. JOptionPane.WARNING_MESSAGE);
  252. }
  253. }
  254. }
  255. }
  256. class AddDataListener implements ActionListener{
  257. @Override
  258. public void actionPerformed(ActionEvent e) {
  259. AddDataDialog dialog = new AddDataDialog(WindowApp.this);
  260. dialog.setVisible(true);
  261. }
  262. }
  263. }
  264.  
  265.  
  266.  
  267. // FileNameExtensionFilter filter = new FileNameExtensionFilter(
  268. // "TXT files", "txt");
  269. // fileOpen.setFileFilter(filter);
Advertisement
Add Comment
Please, Sign In to add comment