Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package view;
- import java.awt.Color;
- import java.awt.Dimension;
- import java.awt.GridLayout;
- import java.awt.Point;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- import java.util.ArrayList;
- import javax.swing.BorderFactory;
- import javax.swing.Box;
- import javax.swing.JButton;
- import javax.swing.JFrame;
- import javax.swing.JLabel;
- import javax.swing.JOptionPane;
- import javax.swing.JPanel;
- import javax.swing.JTextArea;
- import javax.swing.JTextField;
- import org.graphstream.algorithm.ConnectedComponents;
- import org.graphstream.graph.Edge;
- import org.graphstream.graph.Graph;
- import org.graphstream.graph.Node;
- import org.graphstream.graph.implementations.MultiGraph;
- import org.graphstream.ui.swingViewer.ViewPanel;
- import org.graphstream.ui.view.Viewer;
- public class View extends JFrame {
- /**
- * serial wrbna m3rf leh
- */
- private static final long serialVersionUID = 1L;
- private JTextField fromName, gainValue, toName;
- private JLabel from, to, gain, forwardPathsHL, loopsHL, deltasHL, finalAnsHL;
- private JButton addNode, addEdge, solve, reset, close;
- private JPanel data, headersPanel;
- private Graph graph;
- private JTextArea finalAnswerContent, forwardContent, loopContent, deltaContent;
- private ConnectedComponents cc;
- private int nodeNumber = 0;
- private Controller controller;
- private void createObjects() {
- controller = new Controller();
- fromName = new JTextField();
- fromName.setPreferredSize(new Dimension(100, 20));
- toName = new JTextField();
- toName.setPreferredSize(new Dimension(100, 20));
- gainValue = new JTextField();
- gainValue.setPreferredSize(new Dimension(100, 20));
- from = new JLabel("from");
- from.setForeground(Color.ORANGE);
- gain = new JLabel("gain");
- gain.setForeground(Color.ORANGE);
- to = new JLabel("to");
- to.setForeground(Color.ORANGE);
- addNode = new JButton("Add node");
- addNode.setBackground(Color.ORANGE);
- addEdge = new JButton("Add edge");
- addEdge.setBackground(Color.ORANGE);
- reset = new JButton("reset");
- reset.setBackground(Color.ORANGE);
- close = new JButton("close");
- close.setBackground(Color.ORANGE);
- solve = new JButton("solve");
- solve.setBackground(Color.ORANGE);
- data = new JPanel();
- graph = new MultiGraph("SFG");
- graph.addAttribute("ui.quality");
- graph.addAttribute("ui.antialias");
- graph.setStrict(false);
- graph.setAutoCreate(true);
- graph.addAttribute("ui.quality");
- graph.addAttribute("ui.stylesheet",
- "node { size: 30px,30px; fill-color: orange; stroke-mode: plain; stroke-color: #999; shadow-mode: gradient-radial; shadow-width: 2px; shadow-color: #999, white; shadow-offset: 3px, -3px; } edge {arrow-shape: arrow; arrow-size: 10px, 10px;}");
- headersPanel = new JPanel();
- cc = new ConnectedComponents();
- forwardPathsHL = new JLabel("Forward Paths : ");
- loopsHL = new JLabel("Loops : ");
- deltasHL = new JLabel("Deltas : ");
- finalAnsHL = new JLabel("Final answer : ");
- forwardPathsHL.setForeground(Color.ORANGE);
- loopsHL.setForeground(Color.ORANGE);
- deltasHL.setForeground(Color.ORANGE);
- finalAnsHL.setForeground(Color.ORANGE);
- forwardContent = new JTextArea(10, 50);
- forwardContent.setBorder(BorderFactory.createLineBorder(Color.ORANGE, 7));
- loopContent = new JTextArea(10, 50);
- loopContent.setBorder(BorderFactory.createLineBorder(Color.ORANGE, 7));
- deltaContent = new JTextArea(10, 50);
- deltaContent.setBorder(BorderFactory.createLineBorder(Color.ORANGE, 7));
- finalAnswerContent = new JTextArea(5, 50);
- finalAnswerContent.setBorder(BorderFactory.createLineBorder(Color.ORANGE, 7));
- forwardContent.setEditable(false);
- loopContent.setEditable(false);
- deltaContent.setEditable(false);
- finalAnswerContent.setEditable(false);
- forwardContent.setLineWrap(true);
- loopContent.setLineWrap(true);
- deltaContent.setLineWrap(true);
- finalAnswerContent.setLineWrap(true);
- }
- private void createdata() {
- Box box1 = Box.createVerticalBox();
- data.add(from);
- data.add(fromName);
- data.add(to);
- data.add(toName);
- data.add(gain);
- data.add(gainValue);
- data.add(addEdge);
- data.add(addNode);
- Box box2 = Box.createHorizontalBox();
- box2.add(solve);
- box2.add(close);
- box2.add(reset);
- data.add(box2);
- headersPanel.add(forwardPathsHL);
- headersPanel.add(forwardContent);
- headersPanel.setOpaque(false);
- box1.add(headersPanel);
- headersPanel = new JPanel();
- headersPanel.add(loopsHL);
- headersPanel.add(loopContent);
- headersPanel.setOpaque(false);
- box1.add(headersPanel);
- headersPanel = new JPanel();
- headersPanel.add(deltasHL);
- headersPanel.add(deltaContent);
- headersPanel.setOpaque(false);
- box1.add(headersPanel);
- headersPanel = new JPanel();
- headersPanel.add(finalAnsHL);
- headersPanel.add(finalAnswerContent);
- headersPanel.setOpaque(false);
- box1.add(headersPanel);
- data.add(box1);
- data.setBackground(Color.DARK_GRAY);
- setResizable(false);
- }
- private void printAns() {
- StringBuilder s = new StringBuilder("");
- for (ArrayList<Point> fb : controller.getForwardPaths()) {
- for (Point p : fb)
- s.append(" " + String.valueOf(p.x)).append(" " + String.valueOf(p.y) + " ");
- s.append("\n");
- }
- forwardContent.setText(s.toString());
- s = new StringBuilder("");
- for (ArrayList<Point> l : controller.getLoops()) {
- for (Point p : l)
- s.append(" " + String.valueOf(p.x)).append(" " + String.valueOf(p.y) + " ");
- s.append("\n");
- }
- loopContent.setText(s.toString());
- s = new StringBuilder("");
- for (double delta : controller.getDeltas())
- s.append(String.valueOf(delta) + " ");
- deltaContent.setText(s.toString());
- finalAnswerContent.setText(String.valueOf(controller.getFinalAns()));
- }
- private void addSolveActiontLisenter() {
- solve.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent arg0) {
- // check if they are one component
- // if they have one and only one node with zero in degree
- // if and only if one node with zero out degree
- cc.init(graph);
- if (cc.getConnectedComponentsCount() != 1) {
- JOptionPane.showMessageDialog(null, "There must be a component");
- return;
- }
- int countNodeWithZeroIndgree = 0;
- for (Node n : graph) {
- if (n.getInDegree() == 0) {
- countNodeWithZeroIndgree++;
- }
- }
- if (countNodeWithZeroIndgree != 1) {
- JOptionPane.showMessageDialog(null, "Only one Node must have zero InDegree");
- return;
- }
- int countNodeWithZeroOutdgree = 0;
- for (Node n : graph) {
- if (n.getOutDegree() == 0) {
- countNodeWithZeroOutdgree++;
- }
- }
- if (countNodeWithZeroOutdgree != 1) {
- JOptionPane.showMessageDialog(null, "Only one Node must have zero outDegree");
- return;
- }
- controller.solve(graph);
- printAns();
- }
- });
- }
- private void addCloseActionListener() {
- close.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent arg0) {
- setVisible(false);
- dispose();
- }
- });
- }
- private void addResetActionListener() {
- reset.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent arg0) {
- graph.clear();
- graph.addAttribute("ui.quality");
- graph.addAttribute("ui.antialias");
- graph.setStrict(false);
- graph.setAutoCreate(true);
- graph.addAttribute("ui.quality");
- graph.addAttribute("ui.stylesheet",
- "node { size: 30px,30px; fill-color: orange; stroke-mode: plain; stroke-color: #999; shadow-mode: gradient-radial; shadow-width: 2px; shadow-color: #999, white; shadow-offset: 3px, -3px; } edge {arrow-shape: arrow; arrow-size: 10px, 10px;}");
- nodeNumber = 0;
- cleanUpInputBoxes();
- cleanUpOPBoxes();
- }
- });
- }
- private void addEdgeActionListener() {
- addEdge.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent arg0) {
- // check from
- try {
- int frm = Integer.parseInt(fromName.getText());
- int t = Integer.parseInt(toName.getText());
- Double g = Double.parseDouble(gainValue.getText());
- if (frm > nodeNumber || t > nodeNumber || g.equals(0.0)) {
- cleanUpInputBoxes();
- JOptionPane.showMessageDialog(null, "Wrong input.");
- return;
- }
- } catch (Exception e) {
- cleanUpInputBoxes();
- JOptionPane.showMessageDialog(null, "Wrong input.");
- return;
- }
- graph.addEdge(fromName.getText() + toName.getText(), fromName.getText(), toName.getText(), true);
- Edge e = graph.getEdge(fromName.getText() + toName.getText());
- e.addAttribute("ui.label", gainValue.getText());
- e.addAttribute("ui.stylesheet", "edge { shape: line;fill-color: #222;arrow-size: 10px, 10px;}");
- cleanUpInputBoxes();
- }
- });
- }
- private void addNodeActionListener() {
- addNode.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- nodeNumber++;
- graph.addNode(((Integer) nodeNumber).toString());
- Node n = graph.getNode(((Integer) nodeNumber).toString());
- n.addAttribute("ui.label", n.getId());
- }
- });
- }
- private void addActionLisenters() {
- addNodeActionListener();
- addEdgeActionListener();
- addSolveActiontLisenter();
- addCloseActionListener();
- addResetActionListener();
- }
- public View() {
- createObjects();
- createdata();
- setLayout(new GridLayout(1, 2, 0, 0));
- add(data);
- Viewer viewer = new Viewer(graph, Viewer.ThreadingModel.GRAPH_IN_ANOTHER_THREAD);
- viewer.enableAutoLayout();
- ViewPanel view = viewer.addDefaultView(false);
- view.getCamera().setViewCenter(2, 3, 4);
- view.getCamera().setAutoFitView(true);
- view.getCamera().resetView();
- add(view);
- addActionLisenters();
- setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- setSize(1400, 800);
- setVisible(true);
- }
- private void cleanUpInputBoxes() {
- fromName.setText("");
- toName.setText("");
- gainValue.setText("");
- }
- private void cleanUpOPBoxes() {
- finalAnswerContent.setText("");
- loopContent.setText("");
- forwardContent.setText("");
- deltaContent.setText("");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement