2013-09-15 3 views
-1

В принципе, у меня есть этот код, чтобы напечатать метку ячейки каждой вершины, которую я кликнул на jgraph. Я пытаюсь сохранить значения ячеек в массив строк. Я попытался это:Преобразование значения метки вершины jgraph в массив строк

graphComponent.getGraphControl().addMouseListener(new MouseAdapter() { 

     public void mousePressed(MouseEvent e) { 

     ArrayList<Object> objarr = new ArrayList<Object>() ; 

         if (e.getButton() == 3 && e.getClickCount() == 1) { 
         long x = e.getX(); 
         long y = e.getY(); 
         Object cell = graphComponent.getCellAt((int) x, (int)y); 
         System.out.println(graph.convertValueToString(cell)); 
         objarr.add(cell); 
        } 

         String[] stringArray = objarr.toArray(new String[100]) ; 
} 
       });   
    } 

я получаю эти ошибки, когда я пытаюсь нажать на вершину:

Exception in thread "AWT-EventQueue-0" java.lang.ArrayStoreException 
    at java.lang.System.arraycopy(Native Method) 
    at java.util.Arrays.copyOf(Unknown Source) 
    at java.util.ArrayList.toArray(Unknown Source) 
    at GUIquery$2.mousePressed(GUIquery.java:498) 
    at java.awt.AWTEventMulticaster.mousePressed(Unknown Source) 
    at java.awt.AWTEventMulticaster.mousePressed(Unknown Source) 
    at java.awt.Component.processMouseEvent(Unknown Source) 
    at javax.swing.JComponent.processMouseEvent(Unknown Source) 
    at java.awt.Component.processEvent(Unknown Source) 
    at java.awt.Container.processEvent(Unknown Source) 
    at java.awt.Component.dispatchEventImpl(Unknown Source) 
    at java.awt.Container.dispatchEventImpl(Unknown Source) 
    at java.awt.Component.dispatchEvent(Unknown Source) 
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source) 
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source) 
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) 
    at java.awt.Container.dispatchEventImpl(Unknown Source) 
    at java.awt.Window.dispatchEventImpl(Unknown Source) 
    at java.awt.Component.dispatchEvent(Unknown Source) 
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source) 
    at java.awt.EventQueue.access$200(Unknown Source) 
    at java.awt.EventQueue$3.run(Unknown Source) 
    at java.awt.EventQueue$3.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) 
    at java.awt.EventQueue$4.run(Unknown Source) 
    at java.awt.EventQueue$4.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) 
    at java.awt.EventQueue.dispatchEvent(Unknown Source) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
    at java.awt.EventDispatchThread.run(Unknown Source) 
+0

Каждый объект имеет ToString) 'метод' (. Вы должны переопределить это, если оно уже не ведет себя так, как вы хотите, и вызовите 'cell.toString()'. В противном случае для доступа к этому полю должно быть поле для метки или метода типа getLabel(). Помимо этого наблюдения, очень неясно, откуда вы пришли с этим вопросом. Например, переменная 'graphComponent' не зависит от этого раздела кода, только от' graph'. И вы указали локальную переменную с 'mxGraphComponent graphComponent', которая блокирует область внешнего' graphComponent' (вызывается '' getGraphControl() ') – clwhisk

+1

Вы правы. Не знаю, почему они остались там. Удалили их обоих. Я попытался сохранить значения ячейки, нажатые в графе, в массив строк, но он не работал. Как я мог это достичь? – user2598911

+0

Ну, это ваш график ... Я могу сказать, потому что он не соответствует соглашению об именах для классов Java. Все, что вам нужно, чтобы сохранить значение в массив строк, это строка. Следуя подсказкам отладки и задавая четко заданный вопрос, вы получаете одинаковые навыки. Удачи. – clwhisk

ответ

0

Вот процесс, чтобы решить такую ​​проблему.

at java.util.ArrayList.toArray(Unknown Source) 
at GUIquery$2.mousePressed(GUIquery.java:498)` 

линии 498 должна быть

String[] stringArray = objarr.toArray(new String[100]) ; 

ArrayList documentation Проверить для <T> T[] toArray(T[] a)

При вызове этого пытается сохранить ArrayList<Object> членов типа Object в String[]. Так он дал ArrayStoreException. Корень проблемы состоит в том, что компьютер не знает, что такое типcell есть. Вы объявили как Object, так что это его тип. Если getCellAt() возвращает строки, используйте String cell.

Как отмечают, что это не элегантное решение здесь, если у вас была Object obj_str, что вы знали, был String, вы можете бросить его с

String str = (String)obj_str; 

 Смежные вопросы

  • Нет связанных вопросов^_^