init commit
This commit is contained in:
@@ -0,0 +1,237 @@
|
||||
import edu.princeton.cs.algs4.StdRandom;
|
||||
|
||||
import java.awt.BorderLayout;
|
||||
import java.awt.Color;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.FlowLayout;
|
||||
import java.awt.GridLayout;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.awt.event.MouseListener;
|
||||
import java.io.File;
|
||||
|
||||
import javax.swing.BorderFactory;
|
||||
import javax.swing.Box;
|
||||
import javax.swing.BoxLayout;
|
||||
import javax.swing.JButton;
|
||||
import javax.swing.JFileChooser;
|
||||
import javax.swing.JFrame;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JList;
|
||||
import javax.swing.JMenuBar;
|
||||
import javax.swing.JTextField;
|
||||
import javax.swing.UIManager;
|
||||
import javax.swing.border.BevelBorder;
|
||||
|
||||
public class GUI {
|
||||
private final static Color bg = Color.DARK_GRAY;
|
||||
private final static Color fg = Color.WHITE;
|
||||
private static JFrame frame;
|
||||
private static JPanel contentPane;
|
||||
|
||||
public static void setup() {
|
||||
frame = new JFrame("Graph");
|
||||
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||
frame.setPreferredSize(new Dimension(1000, 1000));
|
||||
frame.setSize(frame.getPreferredSize());
|
||||
frame.setResizable(false);
|
||||
|
||||
try {
|
||||
UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
|
||||
} catch (Exception e) {
|
||||
System.out.println("Error with cross platform look/feel in frameSetup().");
|
||||
}
|
||||
GraphFunctions.init();
|
||||
frame.add(createContentPane());
|
||||
frame.setLocationRelativeTo(null);
|
||||
frame.setVisible(true);
|
||||
}
|
||||
|
||||
private static JPanel createContentPane() {
|
||||
contentPane = new JPanel(new BorderLayout());
|
||||
contentPane.add(new DisplayPanel(), BorderLayout.CENTER);
|
||||
contentPane.add(createButtonPane(), BorderLayout.NORTH);
|
||||
contentPane.setForeground(fg);
|
||||
contentPane.setBackground(bg);
|
||||
|
||||
return contentPane;
|
||||
}
|
||||
|
||||
private static JPanel createButtonPane() {
|
||||
JPanel pane = new JPanel();
|
||||
pane.setForeground(fg);
|
||||
pane.setBackground(bg);
|
||||
pane.setAlignmentX(0.5f);
|
||||
pane.setLayout(new BoxLayout(pane, BoxLayout.X_AXIS));
|
||||
pane.setBorder(BorderFactory.createLineBorder(Color.BLACK));
|
||||
|
||||
pane.add(createAddVPanel());
|
||||
|
||||
JTextField vertex1 = new JTextField();
|
||||
JTextField vertex2 = new JTextField();
|
||||
JTextField eWeight = new JTextField();
|
||||
vertex1.setForeground(fg);
|
||||
vertex1.setBackground(bg);
|
||||
vertex2.setForeground(fg);
|
||||
vertex2.setBackground(bg);
|
||||
eWeight.setForeground(fg);
|
||||
eWeight.setBackground(bg);
|
||||
|
||||
pane.add(vertex1);
|
||||
pane.add(vertex2);
|
||||
pane.add(eWeight);
|
||||
|
||||
JButton b = new JButton("Add an edge");
|
||||
b.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent arg0) {
|
||||
if(vertex1.getText().equals("") || vertex2.getText().equals("") || eWeight.getText().equals("")) {
|
||||
int v = StdRandom.uniformInt(GraphFunctions.getGraph().V());
|
||||
int w = StdRandom.uniformInt(GraphFunctions.getGraph().V());
|
||||
double weight = StdRandom.uniformInt(0, 100);
|
||||
GraphFunctions.addEdge(v, w, weight);
|
||||
}
|
||||
else {
|
||||
GraphFunctions.addEdge(Integer.parseInt(vertex1.getText()),
|
||||
Integer.parseInt(vertex2.getText()),
|
||||
Double.parseDouble(eWeight.getText()));
|
||||
}
|
||||
contentPane.removeAll();
|
||||
frame.setContentPane(createContentPane());
|
||||
contentPane.repaint();
|
||||
contentPane.revalidate();
|
||||
}
|
||||
});
|
||||
b.setFocusPainted(false);
|
||||
b.setFocusable(false);
|
||||
b.setForeground(fg);
|
||||
b.setBackground(bg);
|
||||
pane.add(b);
|
||||
|
||||
JPanel p = new JPanel(new GridLayout(1, 2));
|
||||
JPanel subPanel = new JPanel(new GridLayout(2, 1));
|
||||
b = new JButton("Reset graph");
|
||||
b.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent arg0) {
|
||||
GraphFunctions.reset();
|
||||
contentPane.removeAll();
|
||||
frame.setContentPane(createContentPane());
|
||||
contentPane.repaint();
|
||||
contentPane.revalidate();
|
||||
}
|
||||
});
|
||||
b.setFocusPainted(false);
|
||||
b.setFocusable(false);
|
||||
b.setForeground(fg);
|
||||
b.setBackground(bg);
|
||||
subPanel.add(b);
|
||||
|
||||
b = new JButton("Load graph");
|
||||
b.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent arg0) {
|
||||
JFileChooser fc = new JFileChooser("~");
|
||||
int returnVal = fc.showOpenDialog(frame);
|
||||
if (returnVal == JFileChooser.APPROVE_OPTION) {
|
||||
GraphFunctions.loadGraph(fc.getSelectedFile());
|
||||
contentPane.removeAll();
|
||||
frame.setContentPane(createContentPane());
|
||||
contentPane.repaint();
|
||||
contentPane.revalidate();
|
||||
}
|
||||
}
|
||||
});
|
||||
b.setFocusPainted(false);
|
||||
b.setFocusable(false);
|
||||
b.setForeground(fg);
|
||||
b.setBackground(bg);
|
||||
subPanel.add(b);
|
||||
|
||||
p.add(subPanel);
|
||||
p.add(createRandomPanel());
|
||||
|
||||
contentPane.add(p, BorderLayout.SOUTH);
|
||||
|
||||
return pane;
|
||||
}
|
||||
|
||||
private static JPanel createAddVPanel() {
|
||||
JPanel vertPnl = new JPanel(new GridLayout(1, 3));
|
||||
vertPnl.setForeground(fg);
|
||||
vertPnl.setBackground(bg);
|
||||
JLabel verticesLbl = new JLabel("Number of vertices to add: ");
|
||||
verticesLbl.setForeground(fg);
|
||||
verticesLbl.setBackground(bg);
|
||||
vertPnl.add(verticesLbl);
|
||||
JTextField addVertices = new JTextField();
|
||||
addVertices.setForeground(fg);
|
||||
addVertices.setBackground(bg);
|
||||
vertPnl.add(addVertices);
|
||||
JButton b = new JButton("Add vertices");
|
||||
b.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent arg0) {
|
||||
if(addVertices.getText().equals("")) GraphFunctions.addVertex();
|
||||
else {
|
||||
for(int i = 0; i < Integer.parseInt(addVertices.getText()); i++)
|
||||
GraphFunctions.addVertex();
|
||||
}
|
||||
contentPane.removeAll();
|
||||
frame.setContentPane(createContentPane());
|
||||
contentPane.repaint();
|
||||
contentPane.revalidate();
|
||||
}
|
||||
});
|
||||
b.setFocusPainted(false);
|
||||
b.setFocusable(false);
|
||||
b.setForeground(fg);
|
||||
b.setBackground(bg);
|
||||
vertPnl.add(b);
|
||||
return vertPnl;
|
||||
}
|
||||
|
||||
private static JPanel createRandomPanel() {
|
||||
JPanel randomPanel = new JPanel(new GridLayout(2, 1));
|
||||
randomPanel.setForeground(fg);
|
||||
randomPanel.setBackground(bg);
|
||||
JPanel subPanel = new JPanel(new GridLayout(2, 2));
|
||||
subPanel.setForeground(fg);
|
||||
subPanel.setBackground(bg);
|
||||
JLabel veLabel = new JLabel("Number of Vertices:");
|
||||
veLabel.setForeground(fg);
|
||||
JTextField vertexCount = new JTextField();
|
||||
vertexCount.setForeground(fg);
|
||||
vertexCount.setBackground(bg);
|
||||
JLabel edLabel = new JLabel("Number of edges:");
|
||||
edLabel.setForeground(fg);
|
||||
JTextField edgesCount = new JTextField();
|
||||
edgesCount.setForeground(fg);
|
||||
edgesCount.setBackground(bg);
|
||||
subPanel.add(veLabel);
|
||||
subPanel.add(vertexCount);
|
||||
subPanel.add(edLabel);
|
||||
subPanel.add(edgesCount);
|
||||
randomPanel.add(subPanel);
|
||||
JButton b = new JButton("Random graph");
|
||||
b.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent arg0) {
|
||||
if(vertexCount.getText().equals("") || edgesCount.getText().equals(""))GraphFunctions.random(10, 20);
|
||||
else GraphFunctions.random(Integer.parseInt(vertexCount.getText()), Integer.parseInt(edgesCount.getText()));
|
||||
contentPane.removeAll();
|
||||
frame.setContentPane(createContentPane());
|
||||
contentPane.repaint();
|
||||
contentPane.revalidate();
|
||||
}
|
||||
});
|
||||
b.setFocusPainted(false);
|
||||
b.setFocusable(false);
|
||||
b.setForeground(fg);
|
||||
b.setBackground(bg);
|
||||
randomPanel.add(b);
|
||||
|
||||
return randomPanel;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user