Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.company;
- import javax.swing.*;
- import javax.swing.filechooser.FileNameExtensionFilter;
- import javax.swing.table.DefaultTableModel;
- import javax.xml.parsers.DocumentBuilder;
- import javax.xml.parsers.DocumentBuilderFactory;
- import java.awt.*;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- import java.io.File;
- import java.io.FileNotFoundException;
- import java.io.FileWriter;
- import java.io.IOException;
- import java.util.*;
- import org.w3c.dom.*;
- import org.xml.sax.SAXException;
- import javax.xml.parsers.*;
- public class WindowApp extends JFrame {
- private final static int LIST_X = 300;
- private final static int LIST_Y = 500;
- public static final Object[] tableHeader = new String[]{"ID","Surname","Course","Group","City"};
- JMenu menu;
- JMenu menuStudents;
- JMenuBar menuBar;
- JMenuItem menuItem1;
- JMenuItem menuItem2;
- JMenuItem menuItem3;
- JMenuItem menuItem4;
- JMenuItem menuItem5;
- JScrollPane scrollPane;
- JPanel mainPanel;
- JPanel northPanel;
- JButton addDataButton;
- JButton chooseFileButton;
- JButton sortButton;
- JTable table;
- public ArrayList<Student> getModelStudents() {
- return studentArrayList;
- }
- ArrayList<Student> studentArrayList;
- WindowApp() {
- //panel
- mainPanel = new JPanel();
- mainPanel.setLayout(new BorderLayout());
- //buttons
- addDataButton = new JButton("Add new students...");
- chooseFileButton = new JButton("Choose text file...");
- sortButton = new JButton("Sort");
- addDataButton.setPreferredSize(new Dimension(LIST_X, 20));
- sortButton.setPreferredSize(new Dimension(LIST_X, 20));
- //
- northPanel = new JPanel();
- northPanel.add(addDataButton, BorderLayout.WEST);
- //mainPanel.add(chooseFileButton, BorderLayout.SOUTH);
- northPanel.add(sortButton, BorderLayout.EAST);
- mainPanel.add(northPanel, BorderLayout.NORTH);
- //model
- studentArrayList = new ArrayList<>();
- //table
- table = new JTable();
- table.setPreferredSize(new Dimension(2*LIST_X, LIST_Y));
- scrollPane = new JScrollPane(table);
- scrollPane.setPreferredSize(new Dimension(2*LIST_X, LIST_Y));
- table.setFillsViewportHeight(true);
- mainPanel.add(scrollPane, BorderLayout.CENTER);
- //add header
- DefaultTableModel model = new DefaultTableModel(tableHeader,0);
- table.setModel(model);
- //menu bar
- menuBar = new JMenuBar();
- menu = new JMenu("File");
- menuStudents = new JMenu(("Students"));
- menuItem1 = new JMenuItem("Add student...");
- menuItem2 = new JMenuItem("Open text file...");
- menuItem3 = new JMenuItem("Sort");
- menuItem4 = new JMenuItem("Save as XML file...");
- menuItem5 = new JMenuItem("Open XML file...");
- menuStudents.add(menuItem3);
- menuStudents.add(menuItem1);
- menu.add(menuItem2);
- menu.add(menuItem5);
- menu.addSeparator();
- menu.add(menuItem4);
- menuBar.add(menu);
- menuBar.add(menuStudents);
- setJMenuBar(menuBar);
- //window
- setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
- setResizable(false);
- setContentPane(mainPanel);
- pack();
- //listeners
- addDataButton.addActionListener(new AddDataListener());
- chooseFileButton.addActionListener(new ChooseFileListener());
- menuItem1.addActionListener(new AddDataListener());
- menuItem2.addActionListener(new ChooseFileListener());
- menuItem4.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- JFileChooser fileChooser = new JFileChooser();
- if (fileChooser.showSaveDialog(null) == JFileChooser.APPROVE_OPTION) {
- File file = fileChooser.getSelectedFile();
- try {
- writeToXMLFile(file);
- }
- catch (IOException exception){
- }
- }
- }
- });
- menuItem5.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- //parse xml file (DOM)
- JFileChooser fileOpen = new JFileChooser();
- int ret = fileOpen.showOpenDialog(null);
- if (ret == JFileChooser.APPROVE_OPTION) {
- try {
- studentArrayList=new ArrayList<>();
- DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
- DocumentBuilder builder = factory.newDocumentBuilder();
- File file=fileOpen.getSelectedFile();
- Document document = builder.parse(file);
- NodeList studentElements = document
- .getDocumentElement()
- .getElementsByTagName("student");
- for (int i = 0; i < studentElements.getLength(); i++) {
- Node student = studentElements.item(i);
- if (student.getNodeType() == Node.ELEMENT_NODE) {
- Element element = (Element) student;
- int recBookNum = Integer.parseInt(element.getAttribute("id"));
- String surname =
- element
- .getElementsByTagName("surname")
- .item(0)
- .getTextContent();
- int course = Integer.parseInt(
- element
- .getElementsByTagName("course")
- .item(0)
- .getTextContent());
- int group = Integer.parseInt(
- element
- .getElementsByTagName("group")
- .item(0)
- .getTextContent());
- String city= element.getAttribute("city");
- studentArrayList.add(new Student(recBookNum,surname,course,group,city));
- }
- }
- updateList();
- }
- catch (ParserConfigurationException exception){
- JOptionPane.showMessageDialog(WindowApp.this,
- "Parser error.",
- "Inane warning",
- JOptionPane.WARNING_MESSAGE);
- }
- catch (SAXException exception){
- JOptionPane.showMessageDialog(WindowApp.this,
- "SAX error.",
- "Inane warning",
- JOptionPane.WARNING_MESSAGE);
- }
- catch (IOException exception){
- JOptionPane.showMessageDialog(WindowApp.this,
- "Cannot open the file.",
- "Inane warning",
- JOptionPane.WARNING_MESSAGE);
- }
- }
- }
- });
- }
- public void updateList() {
- DefaultTableModel model = new DefaultTableModel(tableHeader,0);
- Iterator<Student> iterator = studentArrayList.iterator();
- Student student;
- while (iterator.hasNext()) {
- student=iterator.next();
- model.addRow(new Object[]{student.getRecBookNum(),student.getSurname(),student.getCourse(),student.getGroup(),student.getCity()});
- }
- table.setModel(model);
- }
- public void writeToXMLFile(File file) throws IOException {
- file.createNewFile();
- FileWriter writer=new FileWriter(file);
- writer.write(this.toXMLString());
- writer.flush();
- writer.close();
- }
- public String toXMLString(){
- StringBuffer resultXML=new StringBuffer();
- resultXML.append("<students>\n");
- Iterator<Student> iterator = studentArrayList.iterator();
- while (iterator.hasNext()){
- resultXML.append(iterator.next().toXMLString());
- }
- resultXML.append("</students>\n");
- return resultXML.toString();
- }
- class ChooseFileListener implements ActionListener {
- public void actionPerformed(ActionEvent e) {
- JFileChooser fileOpen = new JFileChooser();
- FileNameExtensionFilter filter = new FileNameExtensionFilter(
- "TXT files", "txt");
- fileOpen.setFileFilter(filter);
- int ret = fileOpen.showOpenDialog(null);
- if (ret == JFileChooser.APPROVE_OPTION) {
- try {
- studentArrayList=new ArrayList<>();
- int recBookNum;
- String surname;
- int course;
- int group;
- String city;
- Scanner scanner = new Scanner(fileOpen.getSelectedFile());
- while (scanner.hasNext()) {
- recBookNum = scanner.nextInt();
- surname = scanner.next();
- course = scanner.nextInt();
- group = scanner.nextInt();
- city = scanner.next();
- studentArrayList.add(new Student(recBookNum, surname, course, group,city));
- updateList();
- }
- } catch (FileNotFoundException exception) {
- JOptionPane.showMessageDialog(WindowApp.this,
- "Cannot open the file.",
- "Inane warning",
- JOptionPane.WARNING_MESSAGE);
- }
- }
- }
- }
- class AddDataListener implements ActionListener{
- @Override
- public void actionPerformed(ActionEvent e) {
- AddDataDialog dialog = new AddDataDialog(WindowApp.this);
- dialog.setVisible(true);
- }
- }
- }
- // FileNameExtensionFilter filter = new FileNameExtensionFilter(
- // "TXT files", "txt");
- // fileOpen.setFileFilter(filter);
Advertisement
Add Comment
Please, Sign In to add comment