2013-10-01 3 views
-2

Я пытаюсь изменить стиль вершины v4 со следующим кодом. Я получаю ошибку, хотя с изменением стиля. Я попытался сделать другие действия вместо setVisible (false), и он работает. Так что это должен быть метод, который я использую. Что я должен изменить?Ошибка при изменении стиля вершин

  public class graphgen extends JFrame { 

       JFrame frame ; 
       static JGraph jgraph ; 

       final static mxGraph graph = new mxGraph() { 


       final static mxGraphComponent graphComponent = new mxGraphComponent(graph); 

       Object cell ; 
       Object v1, v2, v3, v4, v5, v6, v7, v8, w1, w2, w3, w4, w5, w6, w7, w8, w9, w10, w11, w12, w13, w14, w15, w16, w17, w18, z1, z2, z3, z4, y1, y2, y3, y4, y5, y6 ; 

       private static final int OPACITY_PALE = 20; 
       private static final int OPACITY_HL = 100; 


       public graphgen() { 



        gen(); 

       } 

       public void gen(){ 

       Hashtable<String, Object> oldstyle = new Hashtable<String, Object>(); 
       oldstyle.put(mxConstants.STYLE_OPACITY, OPACITY_PALE); 
       .... 

       Hashtable<String, Object> newstyle = new Hashtable<String, Object>(); 
       newstyle.put(mxConstants.STYLE_OPACITY, OPACITY_HL); 
       ... 


stylesheet.putCellStyle(oldstyle, oldstyle); 
    stylesheet.putCellStyle(newstyle, newstyle); 

Object parent = graph.getDefaultParent(); 

       graph.getModel().beginUpdate(); 
        try 
        {.... 

    Object v4 = graph.insertVertex(parent, null, "label", 380, 80, 80, 
        30, oldstyle); 
       ... 

       if (GC.contains("aaa")) { 

          graph.getView().getState(v4).setStyle(newstyle); 

          graphComponent.refresh(); 
          graph.repaint(); 
        } 

       ....} 
        finally 
        { 
         graph.getModel().endUpdate(); 
        } 



      getContentPane().add(graphComponent); 
      add(graphComponent); 

      ... 
     } 

      public static void main(String[] args) 
       { 
         graphgen frame = new graphgen(); 

        frame.pack(); 
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
        frame.setResizable(false); 
        frame.setSize(1600, 1200); 
        frame.setVisible(true); 


       } 
      } 

Я получаю следующее сообщение об ошибке:

Exception in thread "main" java.lang.NullPointerException 
    at graphgen.gen(graphgen.java:482) // line with raph.getView().getState(v4).changeStyle(newstyle); 
+0

Было бы проще сказать, что именно «null», если вы не объединили много методов вместе. – kiheru

+0

обновленный код. @kiheru – user2598911

+0

В этой строке есть три вещи: 'graph', возвращаемое значение' getView() 'и возвращаемое значение' getState (v4) '. Первое маловероятно, если вы не переназначили 'graph' после вызова' getModel() '. Использование временных переменных для хранения значений поможет проверить, кто из них вызывает проблему. – kiheru

ответ

1

Использование:

mxGraph.setCellStyle(String style, Object[] cells) 

вместо этого.

+0

Попробовали. Не работает. Во всяком случае, я нашел другое решение, а не самое эффективное, но все же выполняю свою работу. С продолжением ifs для каждой вставленной вершины. – user2598911