Graphstream Mouse Listener和Swing JMenuBar的奇怪行为

时间:2014-04-02 21:21:21

标签: java swing mouselistener jmenubar graphstream

我正在创建一个创建和显示图形的程序。

我有一个处理图形并实现鼠标监听器(Graphstream ViewerListener)的类。 为了获取事件,您需要使用循环并调用pump()方法,直到完成为止。

要显示图表,Graphstream库有一个可以扩展的View对象,可以用作常规Jpanel,只需将View对象设置为JFrame中的内容窗格即可

JFrame一起使用没有菜单栏时,我的班级工作正常。

但是当我在JMenuBar设置JFrame时,问题就开始了。 我在我的图形类中调用该方法,它进入循环内部,但ViewerListener不起作用,就像它没有监听事件一样。为什么呢?

这是我的类代码,省略了不必要的东西

public class GeneratedGraph implements ViewerListener{  

public String[] getNodes(){
    boolean flag=true;
    startEndNodes[0]=null; startEndNodes[1]=null;
    arrayposition=0;

    while(flag){
        System.out.println("Inside the loop");
        fromViewer.pump();
        try {
            Thread.sleep(250);
           } catch (InterruptedException e) {
            e.printStackTrace();
        }
        if(startEndNodes[0]!=null && startEndNodes[1]!=null){
            flag=false;
        }
    }
    System.out.println("Outside the loop");

    return startEndNodes;
}


public void buttonPushed(String id) {  //This method fires up when you click on a node
    System.out.println("Button pushed on node "+id);

    startEndNodes[arrayposition]=id;
    arrayposition++;

    if(arrayposition>1){ arrayposition=0;}
}
}

现在,为了把事情放到透视图中,这个WORKS进入,抓取节点,并退出循环。 (不必要的代码再次省略)

public class main extends implements ActionListener {
public static void main(String args[]){

    JFrame mainFrame = new JFrame("Graph");
    mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


    GeneratedGraph myGraph = new GeneratedGraph(mainFrame);
    myGraph.option1(5,6);  //a method which creates a graph
    myGraph.show();

    mainFrame.pack();
    mainFrame.setVisible(true);


    String s[] = myGraph.getNodes();

}
}

但是当我添加它时,它没有。它只是进入循环,来自ViewerListener的事件永远不会触发,因此它会卡住。

public class main extends implements ActionListener {
public static void main(String args[]){

    JFrame mainFrame = new JFrame("Graph");
    mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JMenuBar menuBar= new JMenuBar();
    mainFrame.setJMenuBar(menuBar);

    JMenu algorithmMenu = new JMenu("Algorithms");
    JMenuItem dijkstra = new JMenuItem("Dijkstra");
    dijkstra.addActionListener(this);
    dijkstra.setActionCommand("Dijkstra");
    algorithmMenu.add(dijkstra);

    menuBar.add(algorithmMenu);


    GeneratedGraph myGraph = new GeneratedGraph(mainFrame);
    myGraph.option1(5,6);  //a method which creates a graph
    myGraph.show();

    mainFrame.pack();
    mainFrame.setVisible(true);


    String s[] = myGraph.getNodes();

}
}

似乎打破一切的部分就是这个 menuBar.add(algorithmMenu); 当我注释掉这个特定的行时,它运行正常。

可能导致ViewerListener不回应的任何想法?它似乎是随机的,JMenuBar会破坏它。

0 个答案:

没有答案