Package lt.refactory.primsAlgo.gui

Source Code of lt.refactory.primsAlgo.gui.MainAppFrame

/*
* DesktopApplication5View.java
*/

package lt.refactory.primsAlgo.gui;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.math.BigDecimal;
import java.net.URISyntaxException;
import java.util.InvalidPropertiesFormatException;
import java.util.Properties;

import javax.swing.BorderFactory;
import javax.swing.GroupLayout;
import javax.swing.JDialog;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.LayoutStyle;
import javax.swing.UIManager;
import lt.refactory.primsAlgo.graph.Graph;
import lt.refactory.primsAlgo.graph.Node;
import lt.refactory.primsAlgo.graph.WeightedEdge;
import lt.refactory.primsAlgo.graph.exception.AddEdgeException;
import lt.refactory.primsAlgo.graph.exception.AddNodeException;
import lt.refactory.primsAlgo.gui.customComponents.ImageButton;
import lt.refactory.primsAlgo.gui.customListeners.GraphMouseListener;
import lt.refactory.primsAlgo.service.FileController;
import lt.refactory.primsAlgo.service.PrimsController;

/**
* The application's main frame.
*/
public class MainAppFrame extends JFrame {
  /**
   *
   */
  private static final long serialVersionUID = 3828293560112255576L;
  private Graph<WeightedEdge> graph;
  private PrimsController controller;
  private FileController fileController;
    private GraphMouseListener graphMouseListener;
    private Properties primsProperties;


    public MainAppFrame() {
        super();
       
        try {
      loadPropertiesFromXml();
    } catch (FileNotFoundException | URISyntaxException e) {
      e.printStackTrace();
    }
       
    graph = new Graph<WeightedEdge>();
    controller = new PrimsController(graph);
    fileController = new FileController(controller);
   
   
   
        initComponents();
        progressBar.setVisible(false);
        if (primsProperties.containsKey("DimensionX") && primsProperties.containsKey("DimensionY")){
        setSize(new Dimension(Integer.parseInt(primsProperties.getProperty("DimensionX")),
                      Integer.parseInt(primsProperties.getProperty("DimensionY"))));
        }else{
          setSize(new Dimension(700, 500));
        }  
        setTitle(primsProperties.getProperty("title"));
        setBackground(Color.getColor("blue"));
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    private void loadPropertiesFromXml() throws FileNotFoundException, URISyntaxException {       
      primsProperties = new Properties();
 
    InputStream stream = this.getClass().getResourceAsStream("PrimsProperties.xml")
    try {
      primsProperties.loadFromXML(stream);
    } catch (InvalidPropertiesFormatException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    }
   
  }


  private void initComponents() {
      String imgFolder = "/img/";
     
        mainPanel = new JPanel();
        controlPanel = new JPanel();
        solveLabel = new ImageButton(primsProperties.getProperty("Solve Button"),imgFolder + primsProperties.getProperty("Solve Button image")
                          , imgFolder + primsProperties.getProperty("Solve Button image hover"));
        importLabel = new ImageButton(primsProperties.getProperty("Import Button"), imgFolder + primsProperties.getProperty("Import Button image")
                          , imgFolder + primsProperties.getProperty("Import Button image hover"));
        settingsLabel = new ImageButton(primsProperties.getProperty("Settings Button"), imgFolder + primsProperties.getProperty("Settings Button image")
                      , imgFolder + primsProperties.getProperty("Settings Button image hover"));
        exportLabel = new ImageButton(primsProperties.getProperty("Export Button"), imgFolder + primsProperties.getProperty("Export Button image")
                      , imgFolder + primsProperties.getProperty("Export Button image hover"));
        clearLabel = new ImageButton(primsProperties.getProperty("Clean Button"), imgFolder + primsProperties.getProperty("Clean Button image")
        , imgFolder + primsProperties.getProperty("Clean Button image hover"));
        graphBackgroundPanel = new JPanel();
        graphDrawPanel = new DrawingPanel(controller,primsProperties);
        statusPanel = new JPanel();
        progressBar = new JProgressBar();

       

        controlPanel.setBorder(BorderFactory.createTitledBorder(""));

        solveLabel.setText("Spresti");

        solveLabel.addMouseListener(onSolveLabelClick);       
        clearLabel.addMouseListener(onClearLabelClick);
        importLabel.addMouseListener(onImportLabelClick);
        exportLabel.addMouseListener(onExportLabelClick);
        settingsLabel.addMouseListener(onSettingsLabelClick);

        GroupLayout controlPanelLayout = new GroupLayout(controlPanel);
        controlPanel.setLayout(controlPanelLayout);
        controlPanelLayout.setHorizontalGroup(
            controlPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
            .addGroup(controlPanelLayout.createSequentialGroup()
                .addGroup(controlPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
                    .addGroup(controlPanelLayout.createSequentialGroup()
                        .addContainerGap()
                        .addGroup(controlPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
                            .addComponent(importLabel)
                            .addComponent(solveLabel)
                            .addComponent(exportLabel)))
                    .addGroup(controlPanelLayout.createSequentialGroup()
                        .addContainerGap()
                        .addComponent(clearLabel))
                    .addGroup(controlPanelLayout.createSequentialGroup()
                        .addContainerGap()
                        .addComponent(settingsLabel)))
                .addContainerGap(19, Short.MAX_VALUE))
        );
        controlPanelLayout.setVerticalGroup(
            controlPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
            .addGroup(controlPanelLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(solveLabel)
                .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(importLabel)
                .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(exportLabel)
                .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(clearLabel)
                .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(settingsLabel)
                .addContainerGap(19, Short.MAX_VALUE))
        );

        graphBackgroundPanel.setBorder(BorderFactory.createLineBorder(Color.WHITE));
        //graphBackgroundPanel.setName("graphBackgroundPanel");

        graphDrawPanel.setBorder(BorderFactory.createLineBorder(Color.BLACK));
        //graphDrawPanel.setName("graphDrawPanel");
        graphDrawPanel.setBackground(Color.WHITE);

    graphMouseListener = new GraphMouseListener(graphDrawPanel, controller, null);
        graphDrawPanel.addMouseListener(graphMouseListener);
        graphDrawPanel.addMouseMotionListener(mouseMotionListener);
       
        GroupLayout graphBackgroundPanelLayout = new GroupLayout(graphBackgroundPanel);
        graphBackgroundPanel.setLayout(graphBackgroundPanelLayout);
        graphBackgroundPanelLayout.setHorizontalGroup(
            graphBackgroundPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
            .addGroup(GroupLayout.Alignment.TRAILING, graphBackgroundPanelLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(graphDrawPanel, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addContainerGap())
        );
        graphBackgroundPanelLayout.setVerticalGroup(
            graphBackgroundPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
            .addGroup(graphBackgroundPanelLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(graphDrawPanel, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addContainerGap())
        );

        GroupLayout mainPanelLayout = new GroupLayout(mainPanel);
        mainPanel.setLayout(mainPanelLayout);
        mainPanelLayout.setHorizontalGroup(
            mainPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
            .addGroup(mainPanelLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(controlPanel, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(graphBackgroundPanel, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addContainerGap())
        );
        mainPanelLayout.setVerticalGroup(
            mainPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
            .addGroup(mainPanelLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(mainPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
                    .addComponent(controlPanel, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
                    .addComponent(graphBackgroundPanel, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addContainerGap())
        );

   
     String colorString = primsProperties.getProperty("BackgroundColor");
     colorString = colorString.substring(2, colorString.length());
     Color colorForBackgrounds = Color.decode("0x"+colorString);
    
     String buttonColorString = primsProperties.getProperty("ButtonColor");
     System.out.println(buttonColorString);
     buttonColorString = buttonColorString.substring(2, buttonColorString.length());
     Color colorForButtons = Color.decode("0x"+buttonColorString);
     
    
     importLabel.setForeground(colorForButtons);
     clearLabel.setForeground(colorForButtons);
     exportLabel.setForeground(colorForButtons);
     solveLabel.setForeground(colorForButtons);
     settingsLabel.setForeground(colorForButtons);
    
 
      setBackground(colorForBackgrounds);
      controlPanel.setBackground(colorForBackgrounds);
      graphBackgroundPanel.setBackground(colorForBackgrounds);
      mainPanel.setBackground(colorForBackgrounds);
     
        mainPanel.add(statusPanel);
        setContentPane(mainPanel);
        //setComponent(mainPanel);
        //setStatusBar(statusPanel);
    }

    private JLabel clearLabel;
    private JPanel controlPanel;
    private JLabel exportLabel;
    private JPanel graphBackgroundPanel;
    private DrawingPanel graphDrawPanel;
    private JLabel importLabel;
    private JPanel mainPanel;
    private JProgressBar progressBar;
    private JLabel settingsLabel;
    private JLabel solveLabel;
    private JPanel statusPanel;


   
    private MouseListener onSolveLabelClick = new MouseAdapter() {
      public void mouseClicked(java.awt.event.MouseEvent e) {
        graphDrawPanel.setShowLoadingScreen(false);
        graphDrawPanel.repaint();
        controller.solvePrimsAlgorithm(true);
       
      graphDrawPanel.repaint();
      };
     
  };
 
 
    private MouseListener onClearLabelClick = new MouseAdapter() {
      public void mouseClicked(java.awt.event.MouseEvent e) {
        controller.clear();
      graphDrawPanel.repaint();
      };
     
  };
 
  private MouseListener onImportLabelClick = new MouseAdapter() {
    public void mouseClicked(java.awt.event.MouseEvent e) {
      JFileChooser fileChooser = new JFileChooser(
          System.getProperty("user.dir"));
      fileChooser.setMultiSelectionEnabled(true);
      int returnVal = fileChooser.showOpenDialog(MainAppFrame.this);

      if (returnVal == JFileChooser.APPROVE_OPTION) {
        File[] files = fileChooser.getSelectedFiles();
        try {
          fileController.readFromFile(files);
        } catch (IOException | NumberFormatException | AddNodeException
            | AddEdgeException e1) {
          e1.printStackTrace();
        }
        repaint();
      }
    };
  };
 
 
  MouseListener onExportLabelClick = new MouseAdapter(){
    public void mouseClicked(java.awt.event.MouseEvent e) {
      JFileChooser fileChooser = new JFileChooser(System.getProperty("user.dir"));
     
      int returnVal = fileChooser.showDialog(MainAppFrame.this, "Save");
     
      if (returnVal == JFileChooser.APPROVE_OPTION)
      {
        File file = fileChooser.getSelectedFile();
        try {
          fileController.exportToFile(file);
             
        } catch (IOException e1) {
          e1.printStackTrace();
         
        }
      }
    };
  };
 
  MouseListener onSettingsLabelClick = new MouseAdapter(){
    public void mouseClicked(java.awt.event.MouseEvent e) {     
      showSettingsDialog();
    };
  };
 
  MouseMotionListener mouseMotionListener = new MouseAdapter() {
    public final static int GAP = 15;

    private boolean isNear(Node node, Node newNode) {
      if (Math.abs(node.getPointX().intValue() - newNode.getPointX().intValue()) <= GAP
        && Math.abs(node.getPointY().intValue()-newNode.getPointY().intValue()) <= GAP ){
        return true;
      }
      return false;
    }
   
    public void mouseMoved(java.awt.event.MouseEvent e) {
      BigDecimal x = BigDecimal.valueOf(e.getX());
      BigDecimal y = BigDecimal.valueOf(e.getY());
     
      Node newNode = new Node(x, y);
      Node nearNode = null;
     
      TooltipDisplayInfo tooltipDisplayInfo = null;

      for (Node node : controller.getGraph().getNodeList()) {
        if (isNear(node, newNode)){
          nearNode = node;
        }
      }
      if (nearNode != null){
        tooltipDisplayInfo = new TooltipDisplayInfo(nearNode, e.getX(), e.getY());
        graphDrawPanel.setTooltipDisplayInfo(tooltipDisplayInfo);
      } else {
        graphDrawPanel.setTooltipDisplayInfo(null);
      }
      graphDrawPanel.repaint();

    };
  };
 
  private JDialog settingsDialog;
 
    public void showSettingsDialog() {
   
        if (settingsDialog == null) {

            settingsDialog = new SettingsDialog(this,primsProperties);
            settingsDialog.setLocationRelativeTo(this);
        }else{
          settingsDialog.setVisible(true);
        }
        //this.showSettingsDialog();
     
    }

 
  public static void main(String args[]) {

    try {
      UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    } catch (Exception exception) {
      exception.printStackTrace();
    }

    java.awt.EventQueue.invokeLater(new Runnable() {
      public void run() {
        new MainAppFrame().setVisible(true);
      }
    });
  }
}

/*
statusPanel.setName("statusPanel");

        statusPanelSeparator.setName("statusPanelSeparator");

        statusMessageLabel.setName("statusMessageLabel");

        statusAnimationLabel.setHorizontalAlignment(SwingConstants.LEFT);
        statusAnimationLabel.setName("statusAnimationLabel");


        GroupLayout statusPanelLayout = new GroupLayout(statusPanel);
        statusPanel.setLayout(statusPanelLayout);
        statusPanelLayout.setHorizontalGroup(
            statusPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
            .addComponent(statusPanelSeparator, GroupLayout.DEFAULT_SIZE, 409, Short.MAX_VALUE)
            .addGroup(statusPanelLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(statusMessageLabel)
                .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED, 239, Short.MAX_VALUE)
                .addComponent(progressBar, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(statusAnimationLabel)
                .addContainerGap())
        );
        statusPanelLayout.setVerticalGroup(
            statusPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
            .addGroup(statusPanelLayout.createSequentialGroup()
                .addComponent(statusPanelSeparator, GroupLayout.PREFERRED_SIZE, 2, GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addGroup(statusPanelLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
                    .addComponent(statusMessageLabel)
                    .addComponent(statusAnimationLabel)
                    .addComponent(progressBar, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
                .addGap(3, 3, 3))
        );

*/
 
TOP

Related Classes of lt.refactory.primsAlgo.gui.MainAppFrame

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.