Tranvick

lab3

Apr 17th, 2014
170
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 8.10 KB | None | 0 0
  1. import java.awt.BorderLayout;
  2. import java.awt.FlowLayout;
  3. import java.awt.GridLayout;
  4. import java.awt.Image;
  5. import java.awt.event.ActionEvent;
  6. import java.awt.event.ActionListener;
  7. import java.io.File;
  8. import java.io.IOException;
  9. import java.util.Scanner;
  10.  
  11. import javax.imageio.ImageIO;
  12. import javax.swing.ImageIcon;
  13. import javax.swing.JButton;
  14. import javax.swing.JDialog;
  15. import javax.swing.JFrame;
  16. import javax.swing.JLabel;
  17. import javax.swing.JMenu;
  18. import javax.swing.JMenuBar;
  19. import javax.swing.JMenuItem;
  20. import javax.swing.JOptionPane;
  21. import javax.swing.JPanel;
  22. import javax.swing.JScrollPane;
  23. import javax.swing.JTextField;
  24. import javax.swing.JTree;
  25. import javax.swing.border.EmptyBorder;
  26. import javax.swing.tree.DefaultMutableTreeNode;
  27. import javax.swing.tree.DefaultTreeCellRenderer;
  28. import javax.swing.tree.DefaultTreeModel;
  29. import javax.swing.tree.TreeSelectionModel;
  30.  
  31.  
  32. public class MyFrame extends JFrame {
  33.  
  34.     private static final long serialVersionUID = -2122161377842820073L;
  35.    
  36.     final static int COURSES_COUNT = 5;
  37.     final static int GROUPS_COUNT = 15;
  38.    
  39.     private JTree tree;
  40.     private DefaultTreeModel model;
  41.     private DefaultMutableTreeNode root;
  42.    
  43.     private class MyDialog extends JDialog {
  44.        
  45.         private static final long serialVersionUID = 1120617742105530068L;
  46.  
  47.         public MyDialog() {
  48.             super(MyFrame.this, true);
  49.            
  50.             final JTextField jtfName = new JTextField();
  51.             final JTextField jtfCourse = new JTextField();
  52.             final JTextField jtfGroup = new JTextField();          
  53.             JLabel lbName = new JLabel("Имя");
  54.             JLabel lbCourse = new JLabel("Курс");
  55.             JLabel lbGroup = new JLabel("Группа");
  56.             JButton btOk = new JButton("Ок");
  57.             JButton btCancel = new JButton("Отмена");
  58.            
  59.             btCancel.addActionListener(new ActionListener() {
  60.                 @Override
  61.                 public void actionPerformed(ActionEvent ae) {
  62.                     dispose();
  63.                 }
  64.             });
  65.            
  66.             btOk.addActionListener(new ActionListener() {
  67.                 @Override
  68.                 public void actionPerformed(ActionEvent ae) {
  69.                     try {
  70.                         if (jtfName.getText().length() * jtfCourse.getText().length() * jtfGroup.getText().length() == 0) {
  71.                             throw new Exception();
  72.                         }
  73.                         String name = jtfName.getText();
  74.                         int course = Integer.parseInt(jtfCourse.getText());
  75.                         int group = Integer.parseInt(jtfGroup.getText());
  76.                         if (course < 1 || group < 1) {
  77.                             throw new Exception();
  78.                         }
  79.                         addStudent(course, group, name);
  80.                         dispose();
  81.                     } catch (Exception e) {
  82.                         JOptionPane.showMessageDialog(MyDialog.this, "Неверные данные", "Error", JOptionPane.ERROR_MESSAGE);
  83.                     }
  84.                 }
  85.             });
  86.            
  87.             setLayout(new BorderLayout());
  88.            
  89.             JPanel panel = new JPanel(new GridLayout(6, 1));
  90.             panel.setBorder(new EmptyBorder(0, 5, 0, 5));
  91.             panel.add(lbName);
  92.             panel.add(jtfName);
  93.             panel.add(lbCourse);
  94.             panel.add(jtfCourse);
  95.             panel.add(lbGroup);
  96.             panel.add(jtfGroup);
  97.             add(panel, BorderLayout.CENTER);
  98.            
  99.             JPanel buttonsPanel = new JPanel(new FlowLayout());        
  100.             buttonsPanel.add(btOk);
  101.             buttonsPanel.add(btCancel);
  102.             add(buttonsPanel, BorderLayout.SOUTH);
  103.            
  104.             pack();
  105.            
  106.             setResizable(false);
  107.             setVisible(true);
  108.         }
  109.        
  110.     }
  111.    
  112.     ImageIcon createImageIcon(String path) {
  113.         Image image;
  114.         try {
  115.             image = ImageIO.read(new File(path));
  116.         } catch (IOException e) {
  117.             return null;
  118.         }
  119.         return new ImageIcon(image);
  120.     }
  121.    
  122.     private void initControls() {
  123.         DefaultTreeCellRenderer renderer = new DefaultTreeCellRenderer();
  124.         root = new DefaultMutableTreeNode("ФПМИ");
  125.         model = new DefaultTreeModel(root, true);
  126.         tree = new JTree(model);
  127.         tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
  128.        
  129.         ImageIcon leafIcon = createImageIcon("images/leaf.png");
  130.         if (leafIcon != null) {
  131.             renderer.setLeafIcon(leafIcon);
  132.         }
  133.  
  134.         ImageIcon folderIcon = createImageIcon("images/folder.png");
  135.         if (folderIcon != null) {
  136.             renderer.setClosedIcon(folderIcon);
  137.             renderer.setOpenIcon(folderIcon);
  138.         }
  139.        
  140.         getContentPane().setLayout(new BorderLayout());
  141.        
  142.         JButton btAdd, btRemove, btEdit;
  143.         btRemove = new JButton("Удалить студента");
  144.         btRemove.addActionListener(new ActionListener() {
  145.             @Override
  146.             public void actionPerformed(ActionEvent arg0) {
  147.                 if (tree.getSelectionPath() == null) return;
  148.                 DefaultMutableTreeNode node = (DefaultMutableTreeNode)tree.getSelectionPath().getLastPathComponent();
  149.                 if (!node.getAllowsChildren()) {
  150.                     DefaultMutableTreeNode parent = (DefaultMutableTreeNode)node.getParent();
  151.                     model.removeNodeFromParent(node);
  152.                     while (!parent.isRoot() && parent.isLeaf()) {
  153.                         node = parent;
  154.                         parent = (DefaultMutableTreeNode)node.getParent();
  155.                         model.removeNodeFromParent(node);
  156.                     }
  157.                 }
  158.             }
  159.         });
  160.  
  161.         btAdd = new JButton("Добавить студента");
  162.         btAdd.addActionListener(new ActionListener() {
  163.             @Override
  164.             public void actionPerformed(ActionEvent arg0) {
  165.                 new MyDialog();
  166.             }
  167.         });
  168.                
  169.         btEdit = new JButton("Редактировать студента");
  170.         btEdit.addActionListener(new ActionListener() {
  171.             @Override
  172.             public void actionPerformed(ActionEvent arg0) {
  173.                 if (tree.getSelectionPath() == null) return;
  174.                 DefaultMutableTreeNode node = (DefaultMutableTreeNode)tree.getSelectionPath().getLastPathComponent();
  175.                 if (!node.getAllowsChildren()) {
  176.                     int oldCount = root.getLeafCount();
  177.                     new MyDialog();
  178.                     if (root.getLeafCount() != oldCount) {
  179.                         DefaultMutableTreeNode parent = (DefaultMutableTreeNode)node.getParent();
  180.                         model.removeNodeFromParent(node);
  181.                         while (!parent.isRoot() && parent.isLeaf()) {
  182.                             node = parent;
  183.                             parent = (DefaultMutableTreeNode)node.getParent();
  184.                             model.removeNodeFromParent(node);
  185.                         }
  186.                     }
  187.                 }
  188.             }
  189.         });
  190.  
  191.         JPanel panel = new JPanel();
  192.         panel.setLayout(new GridLayout(1, 3));
  193.        
  194.         panel.add(btAdd);
  195.         panel.add(btRemove);
  196.         panel.add(btEdit);
  197.         getContentPane().add(panel, BorderLayout.NORTH);
  198.        
  199.        
  200.         tree.setCellRenderer(renderer);
  201.         JScrollPane scrollPane = new JScrollPane(tree);
  202.         getContentPane().add(scrollPane, BorderLayout.CENTER);
  203.     }
  204.    
  205.     private void addStudent(int course, int group, String name) {
  206.         String s = course + " курс";
  207.         DefaultMutableTreeNode v = null;
  208.         if (root.getChildCount() > 0) {
  209.             for (DefaultMutableTreeNode cur = (DefaultMutableTreeNode)root.getFirstChild(); cur != null; cur = (DefaultMutableTreeNode)root.getChildAfter(cur)) {
  210.                 if (cur.toString().equals(s)) {
  211.                     v = cur;
  212.                 }
  213.             }
  214.         }
  215.         if (v == null) {
  216.             v = new DefaultMutableTreeNode(s, true);
  217.             model.insertNodeInto(v, root, 0);
  218.         }
  219.  
  220.         s = group + " группа";
  221.         DefaultMutableTreeNode u = null;
  222.         if (v.getChildCount() > 0) {
  223.             for (DefaultMutableTreeNode cur = (DefaultMutableTreeNode)v.getFirstChild(); cur != null;
  224.                     cur = (DefaultMutableTreeNode)v.getChildAfter(cur)) {
  225.                 if (cur.toString().equals(s)) {
  226.                     u = cur;
  227.                 }
  228.             }
  229.         }
  230.         if (u == null) {
  231.             u = new DefaultMutableTreeNode(s, true);
  232.             model.insertNodeInto(u, v, 0);
  233.         }
  234.        
  235.         v = u;
  236.         u = new DefaultMutableTreeNode(name, false);
  237.         model.insertNodeInto(u, v, 0);
  238.        
  239.     }
  240.    
  241.     private void readData() {
  242.         File file = new File("data.txt");
  243.         if (!file.exists()) {
  244.             JOptionPane.showMessageDialog(this, "Данные не найдены", "Error", JOptionPane.ERROR_MESSAGE);
  245.             System.exit(1);
  246.         }
  247.         try (Scanner sc = new Scanner(file)) {
  248.             while (sc.hasNext()) {
  249.                 int course = sc.nextInt();
  250.                 int group = sc.nextInt();
  251.                 sc.skip("[\\s]+");
  252.                 String name = sc.nextLine();
  253.                 if (course < 1 || group < 1) {
  254.                     JOptionPane.showMessageDialog(this, "Ошибка в данных", "Error", JOptionPane.ERROR_MESSAGE);
  255.                     System.exit(1);
  256.                 }
  257.                 addStudent(course, group, name);
  258.             }
  259.         } catch (Exception e) {
  260.             JOptionPane.showMessageDialog(this, "Ошибка при чтении файла", "Error", JOptionPane.ERROR_MESSAGE);
  261.             System.exit(1);
  262.         }
  263.            
  264.     }
  265.    
  266.     public MyFrame() {
  267.         super();
  268.         setDefaultCloseOperation(EXIT_ON_CLOSE);
  269.         initControls();
  270.         readData();
  271.         pack();
  272.         setVisible(true);
  273.     }
  274.  
  275. }
Advertisement
Add Comment
Please, Sign In to add comment