/* * GraphPanel.java * * Created on December 3, 2003, 11:22 PM */ /** * * @author linyuan */ public class GraphPanel extends javax.swing.JPanel { public Graph graph; public Selectable clip; int x; int y; /** Creates new form GraphPanel */ public GraphPanel() { initComponents(); graph=new Graph(); clip=null; /* Vertex u=new Vertex(50,50); Vertex v=new Vertex(100,100); Edge e=new Edge(u,v); graph.add(u); graph.add(v); graph.add(e); graph.add(new Label(100,50,"label")); */ setPreferredSize(new java.awt.Dimension(400, 400)); } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ private void initComponents() {//GEN-BEGIN:initComponents jPopupMenu1 = new javax.swing.JPopupMenu(); jMenuItem1 = new javax.swing.JMenuItem(); jMenuItem2 = new javax.swing.JMenuItem(); jMenuItem3 = new javax.swing.JMenuItem(); jDialog1 = new javax.swing.JDialog(); jLabel1 = new javax.swing.JLabel(); jComboBox1 = new javax.swing.JComboBox(); jLabel2 = new javax.swing.JLabel(); jLabel3 = new javax.swing.JLabel(); jLabel5 = new javax.swing.JLabel(); jLabel6 = new javax.swing.JLabel(); jLabel7 = new javax.swing.JLabel(); jColorChooser1 = new javax.swing.JColorChooser(); jLabel4 = new javax.swing.JLabel(); jMenuItem1.setText("delete"); jMenuItem1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jMenuItem1ActionPerformed(evt); } }); jPopupMenu1.add(jMenuItem1); jMenuItem2.setText("Property"); jMenuItem2.setEnabled(false); jMenuItem2.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jMenuItem2ActionPerformed(evt); } }); jPopupMenu1.add(jMenuItem2); jMenuItem3.setText("Copy"); jMenuItem3.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jMenuItem3ActionPerformed(evt); } }); jPopupMenu1.add(jMenuItem3); jDialog1.getContentPane().setLayout(new java.awt.GridLayout(4, 2)); jLabel1.setText("radius"); jDialog1.getContentPane().add(jLabel1); jDialog1.getContentPane().add(jComboBox1); jLabel2.setText("x"); jDialog1.getContentPane().add(jLabel2); jLabel3.setText("y"); jDialog1.getContentPane().add(jLabel3); jLabel5.setText("y"); jDialog1.getContentPane().add(jLabel5); jLabel6.setText("jLabel6"); jDialog1.getContentPane().add(jLabel6); jLabel7.setText("color"); jDialog1.getContentPane().add(jLabel7); jDialog1.getContentPane().add(jColorChooser1); jLabel4.setText("jLabel4"); setLayout(new java.awt.BorderLayout()); addKeyListener(new java.awt.event.KeyAdapter() { public void keyPressed(java.awt.event.KeyEvent evt) { formKeyPressed(evt); } public void keyReleased(java.awt.event.KeyEvent evt) { formKeyReleased(evt); } }); addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { formMouseClicked(evt); } public void mousePressed(java.awt.event.MouseEvent evt) { formMousePressed(evt); } public void mouseReleased(java.awt.event.MouseEvent evt) { formMouseReleased(evt); } }); addMouseMotionListener(new java.awt.event.MouseMotionAdapter() { public void mouseDragged(java.awt.event.MouseEvent evt) { formMouseDragged(evt); } }); }//GEN-END:initComponents private void formKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_formKeyPressed // Add your handling code here: switch (evt.getKeyCode()) { case 127: // delete // if (e.getModifiers()==0) if(Selectable.selected instanceof Vertex){ graph.delete((Vertex) Selectable.selected); } if(Selectable.selected instanceof Edge){ graph.delete((Edge) Selectable.selected); } if(Selectable.selected instanceof Label){ Label l=(Label) Selectable.selected; l.shortenLabel(); } repaint(0); evt.consume(); return; } }//GEN-LAST:event_formKeyPressed private void formKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_formKeyReleased // Add your handling code here: if(Selectable.selected instanceof Label){ Label l=(Label) Selectable.selected; l.extendLabel(evt.getKeyChar()); repaint(0); } else if(Selectable.selected==null){ Label l=new Label(x,y,""); l.extendLabel(evt.getKeyChar()); System.out.println(l.label+evt.getKeyCode()); graph.add(l); Selectable.select(l); repaint(0); } evt.consume(); }//GEN-LAST:event_formKeyReleased private void jMenuItem3ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem3ActionPerformed // Add your handling code here: //copy the current vertex or edge. clip=Selectable.selected; }//GEN-LAST:event_jMenuItem3ActionPerformed private void jMenuItem2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem2ActionPerformed // Add your handling code here: }//GEN-LAST:event_jMenuItem2ActionPerformed private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem1ActionPerformed // Add your handling code here: //System.out.println("delete the vertex"); if(Selectable.selected instanceof Vertex){ Vertex v=(Vertex) Selectable.selected; graph.delete(v); Selectable.unselect(); repaint(0); } else if(Selectable.selected instanceof Edge){ Edge e =(Edge) Selectable.selected; graph.delete(e); Selectable.unselect(); repaint(0); } }//GEN-LAST:event_jMenuItem1ActionPerformed private void formMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_formMouseReleased // Add your handling code here: if(Selectable.selected instanceof HalfEdge){ HalfEdge h = (HalfEdge) Selectable.selected; Vertex v=graph.hitVertex(evt.getX(), evt.getY()); if(v==null||v==h.u) Selectable.unselect(); else { Edge e = new Edge(h.u,v); graph.add(e); Selectable.select(e); } repaint(0); } }//GEN-LAST:event_formMouseReleased private void formMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_formMousePressed // Add your handling code here: x=evt.getX(); y=evt.getY(); Vertex v=graph.hitVertex(x,y); Edge e=graph.hitEdge(x,y); Label l=graph.hitLabel(x,y); if(l!=null){ Selectable.select(l); repaint(0); return; } if(v!=null){ if(v==Selectable.selected){ if((evt.getModifiers() & evt.ALT_MASK)!=0){ add(jPopupMenu1); jMenuItem3.setEnabled(true); jPopupMenu1.show(this,x,y); } else { //add new edge HalfEdge h=new HalfEdge(v,x,y); Selectable.select(h); repaint(0); h.draw(getGraphics()); } } else{ Selectable.select(v); repaint(0); } } else if(e==Selectable.selected){ if((evt.getModifiers() & evt.ALT_MASK)!=0){ add(jPopupMenu1); jMenuItem3.setEnabled(false); jPopupMenu1.show(this,x,y); } else{ Selectable.select(v); repaint(0); } } else{ Selectable.select(v); repaint(0); } }//GEN-LAST:event_formMousePressed private void formMouseDragged(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_formMouseDragged // Add your handling code here: int x=evt.getX(); int y=evt.getY(); if (Selectable.selected instanceof Vertex) { Vertex v = (Vertex) Selectable.selected; v.x=x; v.y=y; evt.consume(); repaint(0); evt.consume(); } else if(Selectable.selected instanceof HalfEdge){ HalfEdge h = (HalfEdge) Selectable.selected; h.x=x; h.y=y; repaint(0); h.draw(getGraphics()); evt.consume(); } else if(Selectable.selected instanceof Label){ Label l=(Label ) Selectable.selected; l.x=x; l.y=y; evt.consume(); repaint(0); } }//GEN-LAST:event_formMouseDragged private void formMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_formMouseClicked // Add your handling code here: int x=evt.getX(); int y=evt.getY(); Vertex v=graph.hitVertex(x,y); if(v!=null){ Selectable.select(v); repaint(0); } else { Edge e=graph.hitEdge(x,y); if(e!=null){ Selectable.select(e); repaint(0); } else if(evt.getClickCount()>1){ v=new Vertex(x,y); graph.add(v); Selectable.select(v); if(clip instanceof Vertex){ Vertex u=(Vertex) clip; for(int i=0;i