Как я могу исправить ошибку Java: myClass не является абстрактным и не переопределяет абстрактный метод? - PullRequest
0 голосов
/ 12 апреля 2020

Я очень новичок в Java и, будучи GUI одержимым уродом, меня тянет к Swing. У меня нет большого опыта со Java (действительно базовые c знания), и я начал делать игру. Я хочу использовать Swing для этого и начал с некоторого базового c кода для системы входа в систему / регистрации под руководством веб-сайта.

Однако они не говорят мне, как заставить кнопку работать команда, так что я искал inte rnet и нашел ActionListener, но я не уверен, как его использовать. Я пытался реализовать это в своем коде, но я получаю сообщение об ошибке. Я не знаю, что не так, я не могу найти ничего полезного о том, как исправить эту ошибку:

Apiary is not abstract and does not override abstract method
actionPerformed(java.awt.event.ActionListener) in
java.awt.event.ActionListener

Вот мой код:

import javax.swing.*;
import java.awt.event.ActionListener;

public class Apiary implements ActionListener {   
    public static void main(String[]args) {
        JFrame frame = new JFrame("Apiary");
        frame.setSize(350, 150);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel panel = new JPanel();
        frame.add(panel);
        placeComponents(panel);

        frame.setVisible(true);
        panel.addActionListener(placeComponents);
    }    
    private static void placeComponents(JPanel panel) {
        panel.setLayout(null);

        JLabel usernameLabel = new JLabel("Username");
        usernameLabel.setBounds(10,20,80,25);
        panel.add(usernameLabel);

        JTextField userText = new JTextField(20);
        userText.setBounds(100,20,165,25);
        panel.add(userText);

         JLabel passwordLabel = new JLabel("Password");
        passwordLabel.setBounds(10,50,80,25);
        panel.add(passwordLabel);

        JPasswordField passwordText = new JPasswordField(20);
        passwordText.setBounds(100,50,165,25);
        panel.add(passwordText);

        JButton loginButton = new JButton("Login");
        loginButton.setBounds(10, 80, 80, 25);
        panel.add(loginButton);
    }
}

1 Ответ

2 голосов
/ 12 апреля 2020

Как исправить ошибку Java: myClass не является абстрактным и не переопределяет абстрактный метод?

Добавить метод actionPerformed(ActionEvent). Обязательно добавьте обозначение @Override. Смотрите другие изменения, как отмечено в этом рабочем примере.

import javax.swing.*;
import java.awt.event.*;

public class Apiary implements ActionListener {   

    private static void placeComponents(JPanel panel) {
        panel.setLayout(null);

        JLabel usernameLabel = new JLabel("Username");
        usernameLabel.setBounds(10,20,80,25);
        panel.add(usernameLabel);

        JTextField userText = new JTextField(20);
        userText.setBounds(100,20,165,25);
        panel.add(userText);

         JLabel passwordLabel = new JLabel("Password");
        passwordLabel.setBounds(10,50,80,25);
        panel.add(passwordLabel);

        JPasswordField passwordText = new JPasswordField(20);
        passwordText.setBounds(100,50,165,25);
        panel.add(passwordText);

        JButton loginButton = new JButton("Login");
        loginButton.setBounds(10, 80, 80, 25);
        panel.add(loginButton);
        Apiary apiary = new Apiary();
        loginButton.addActionListener(apiary);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        System.out.println("ToDo!");
    }

    public static void main(String[]args) {
        JFrame frame = new JFrame("Apiary");
        frame.setSize(350, 150);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel panel = new JPanel();
        frame.add(panel);
        placeComponents(panel);

        frame.setVisible(true);
    }
}

Общие советы:

  1. Для входа в систему я бы рекомендовал использовать модальный JDialog или JOptionPane вместо JFrame для отображения Это. См. Использование нескольких JFrames, хорошая / плохая практика?
  2. Java Графические интерфейсы должны работать на разных ОС ', размере экрана, разрешении экрана и c. используя разные PLAF в разных регионах. Как таковые, они не способствуют идеальному макету пикселей. Вместо этого используйте менеджеры компоновки или их комбинации вместе с отступами макета и границами для пробела .
...