График Нажмите Интерфейс - PullRequest
0 голосов
/ 22 января 2011

Итак, у меня есть программа, которая строит фазовые траектории.На данный момент все начальные точки случайны, но я пытаюсь добавить способ, с помощью которого программа может начать траекторию с той точки, на которой я щелкаю.Я возился с этим часами, пробуя все, что знаю, ну вот код:

public static void click(final double r, final double t) {
    MouseListener mus = new MouseAdapter() {
        public void mouseClicked(MouseEvent e) {
            double r = e.getX();
            double t = e.getY();
        }
    };
}

public Vector<Graph> getGraphs() {
    // ... bunch of code that draws the graph...
    g.add(new Graph.Line());
    g.lastElement().add(r, t);
    g.lastElement().setColor(Color.blue);

И что он говорит мне, что r и t не могут быть найдены.Я понимаю, что без всего кода трудно помочь, но это куча кода, я могу послать его кому-нибудь по электронной почте, если вы действительно готовы помочь.Но в любом другом случае кто-нибудь понял, что я могу сделать?

1 Ответ

1 голос
/ 22 января 2011

1) r и t не входят в область действия вашего метода getGraphs().

2) Похоже, вы не зарегистрировали свой адаптер мыши как MouseListener в любом месте

3) Непонятно, как метод click() вызывается


Вам нужно захватывать щелчки мыши из оконного компонента, скажем, вы используете JPanel.

Тогда ваш код будет выглядеть примерно так:

public class MyApplication {
    private JFrame myWindow = new JFrame("My Application");
    private JPanel myPanelYouCanClick = new JPanel();

    public MyApplication() {
        myWindow.setContantPane(myPanelYouCanClick);
        myPanelYouCanClick.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent e) {
                double r = e.getX();
                double t = e.getY();
                // Code to create your new trajectory called from here, pass
                // in the values of r and t if required. Remember you are
                // running on the event dispatcher thread!
            }
        });
        myWindow.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                MyApplication app = new MyApplication();
            }
        });
    }
}
...