Функция кнопки в индивидуальном JFrame - PullRequest
0 голосов
/ 09 декабря 2018

У меня есть JFrame, в котором я настраивал свои кнопки в порядке, предпочтительном для моих предпочтений.Это выглядит так: Меню для перемещения

Какую операцию я должен использовать в своем классе ActionListener для вызова кнопки, которую я объявил?Я объявил три JButton, но я вызвал только одну кнопку в классе ActionListener, чтобы показать ошибку.Ошибка заключается в (e.getSource == b1).Не знаю, что заменить, потому что эта строка работает в моем классе JPanel.

import javax.swing.*;
import java.awt.*;
import javax.swing.event.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

class FeedTheDogMenu extends JFrame{
    private JFrame f = new JFrame("Operation Menu");

    Selection handle;
    FeedTheDogMenu(){
        handle = new Selection();

        JButton b1 = new JButton("Forward Traverse");
        b1.setBounds(20, 30, 150, 25);

        JButton b2 = new JButton("Backward Traverse");
        b2.setBounds(20, 60, 150, 25);

        JButton b3 = new JButton("Random Traverse");
        b3.setBounds(20, 90, 150, 25);

        JLabel label = new JLabel();
        label.setBounds(25, 10, 450, 15);
        label.setText("Choose an operation: ");

        JLabel l1 = new JLabel();
        l1.setBounds(195, 28, 200, 15);
        l1.setText("In this menu, you will be");

        JLabel l2 = new JLabel();
        l2.setBounds(195, 46, 200, 15);
        l2.setText("able to witness three");

        JLabel l3 = new JLabel();
        l3.setBounds(195, 64, 200, 15);
        l3.setText("different operations");

        JLabel l4 = new JLabel();
        l4.setBounds(195, 82, 200, 15);
        l4.setText("in which the agent will");

        JLabel l5 = new JLabel();
        l5.setBounds(195, 100, 200, 15);
        l5.setText("perform to find the dog.");

        JLabel author = new JLabel();
        author.setBounds(23, 160, 200, 15);
        author.setText("Feed the Dog v 0.1.3");

        JLabel pow = new JLabel();
        pow.setBounds(23, 173, 200, 15);
        pow.setText("Powered by BlueJ");

        JLabel intelprop = new JLabel();
        intelprop.setBounds(190, 173, 170, 15);
        intelprop.setText("(c) 2018, James Vausch");

        f.add(b1);
        f.add(b2);
        f.add(b3);
        f.add(label);
        f.add(l1);
        f.add(l2);
        f.add(l3);
        f.add(l4);
        f.add(l5);
        f.add(author);
        f.add(pow);
        f.add(intelprop);

        f.setSize(380,235);
        f.setLocation(150, 150);
        f.setLayout(null);
        f.setVisible(true);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        b1.addActionListener(handle);
        b2.addActionListener(handle);
        b3.addActionListener(handle);

        add(f, handle);
    }

    class Selection implements ActionListener{
        public void actionPerformed(ActionEvent e){
            if ("Forward Traverse".equals(e.getSource())) {
                JOptionPane.showMessageDialog(null, "Hello");
                FeedOp feed = new FeedOp();
                feed.display();
                feed.assignDog();
                feed.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            }

            if (e.getSource() == b1) {
                //
            }
        }
    }
}

Это было бы очень полезно, спасибо!

1 Ответ

0 голосов
/ 09 декабря 2018
JButton b1 = new JButton("Forward Traverse");

Переменная "b1" определяется как локальная переменная, поэтому на нее можно ссылаться только в методе, в котором она определена.

Если вы хотите, чтобы ActionListener мог ссылаться на переменнуюзатем вам нужно определить его как переменную экземпляра класса (так же, как вы определяете переменную «handle»).

Также:

if ("Forward Traverse".equals(e.getSource())) { 

Этот код ничего не сделает, потому что метод getSource () не возвращает String.Прочитайте API для ActionEvent.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...