Как правильно отформатировать ActionEvent, чтобы JButtons работал - PullRequest
1 голос
/ 01 апреля 2019

Я настроил некоторые ActionListener, но работает только «Взлет». Другие кнопки не работают при нажатии. Когда на них нажимают, ничего не происходит.

Я пытался создать новый ButtonHandler, но это не сработало.

ButtonListener l = new ButtonListener();

JButton takeoff = new JButton("Takeoff");
takeoff.addActionListener(new ButtonHandler());
takeoff.addActionListener();
grid[0][2].add(takeoff);

JButton land = new JButton("Land");
land.addActionListener(new ButtonHandler());
grid[1][2].add(land);

JButton forward = new JButton("Forward");
forward.addMouseListener(new MouseHandler(l));
forward.addActionListener();
grid[2][1].add(forward);

JButton left = new JButton("Left");
left.addMouseListener(new MouseHandler());
left.addActionListener(new ButtonHandler());
left.addActionListener();
grid[3][0].add(left);


takeoff.addActionListener(l);
land.addActionListener(l);
forward.addActionListener(l);
backward.addActionListener();
left.addActionListener(l);
right.addActionListener(l);
turnLeft.addActionListener(l);
turnRight.addActionListener(l);
up.addActionListener(l);
down.addActionListener(l);
stop.addActionListener(l);

То, что я хочу сделать, это перемещать робот-дрон в правильном направлении, а не просто оставлять его на месте.

Я не уверен, поможет ли эта часть, но я знаю, где мой ButtonHandler реализует ActionListener.

private class ButtonHandler implements ActionListener
      {

        public void actionPerformed(ActionEvent e)
          {

            String button = e.getActionCommand();

            if (button.equals("Takeoff")) {
                RobotModel.takeoff();
            }
            else if (button.equals("Land")) {
                RobotModel.land();
            }

      else if(button.equals("Left")) {
          RobotModel.left();
          }

        }
    }

Ответы [ 2 ]

1 голос
/ 01 апреля 2019

Вы можете использовать actionCommand для вызова метода через отражение, например,

private void init() {
    JButton left = new JButton("Go left");
    // This
    left.setActionCommand("left");
    left.addActionListener(new MethodCallActionHandler());
    // OR that
    left.addActionListener(new MethodCallActionHandler("left"));
}

private void left() {
    // go left...
}

private class MethodCallActionHandler implements ActionListener {

    private String methodName;

    private MethodCallActionHandler() {
        super();
    } 

    private MethodCallActionHandler(String methodName) {
        this.methodName = methodName;
    } 

    public void actionPerformed(ActionEvent e)
    {
        String button = methodName != null ? methodName : e.getActionCommand();
        SurroundingClass.this.getClass().getMethod(button, new Class[] {}).invoke(SurroundingClass.this);
    }
}

Вы также можете передать команду действия как String в MethodCallActionHandler.

0 голосов
/ 01 апреля 2019

Вы можете унаследовать класс Action Listener в своем текущем классе, а затем добавить необходимые методы.Затем вы можете сделать takeoff.add (этот) ... и т.д.

Когда вы устанавливаете

String button = e.getActionCommand();

Это не то, что настраивается, когда вы делаете

JButton button = new JButton("Takeoff"); <-- This is the text associated with the button


button.setActionCommand("Takeoff");

, и тогда оно должно работать.

...