Событие ActionListener в Java - PullRequest
       3

Событие ActionListener в Java

0 голосов
/ 03 января 2012

Хорошо, я начал изучать Java, и это код из Интернета, который не работает на моем компьютере.

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

public class form2 
{
    public static void main(String args[])
    {
        // Create Frame 1
        JFrame frame = new JFrame("Frame 1");
        frame.setSize(333,333);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // Create panel
        JPanel panel = new JPanel();

        // Create button
        JButton button = new JButton("Press me!");

        // Add things
        panel.add(button);
        frame.add(panel);
        frame.setVisible(true);

        // Add the action listener to that button
        button.addActionListener(new action());

        static class action implements ActionListener
        {
            public void actionPerformed (ActionEvent e)
            {
                // Create Frame 2
                JFrame frame2 = new JFrame("Frame 2");
                frame2.setSize(200,200);
                frame2.setVisible(true);
                frame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                JLabel label = new JLabel("Clicked!");
                JPanel panel2 = new JPanel();

                // First add to frame2 the panel just create
                frame2.add(panel2);

                // Add to panel the label
                panel2.add(label);
            }
        }

    }

}

И он выдает ошибку об action не понимаю почему.

Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
action cannot be resolved to a type
Illegal modifier for the local class action; only abstract or final is permitted

at form2.main(form2.java:26)

В чем моя проблема ??На компьютере этого парня работает

http://www.youtube.com/watch?v=jEXxaPQ_fQo&feature=channel_video_title

Может кто-нибудь помочь мне ??

Ответы [ 6 ]

4 голосов
/ 03 января 2012

Вы объявляете статический класс внутри метода, который вы не должны делать.Так что уберите его из метода, или, лучше, сделайте его анонимным внутренним классом:

  button.addActionListener(new ActionListener() {

     public void actionPerformed(ActionEvent e) {
        // Create Frame 2
        JFrame frame2 = new JFrame("Frame 2");
        frame2.setSize(200, 200);
        frame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JLabel label = new JLabel("Clicked!");
        JPanel panel2 = new JPanel();

        // First add to frame2 the panel just create
        frame2.add(panel2);

        // Add to panel the label
        panel2.add(label);
        frame2.setVisible(true);
     }
  });

Какое отношение этот вопрос имеет к java-ee?

2 голосов
/ 03 января 2012

Вы объявляете класс внутри метода, в данном случае main, однако он должен быть вне его, как говорит парень из видео.

Надеюсь, это поможет!

2 голосов
/ 03 января 2012

Статические классы не могут быть определены внутри метода.Переместите определение класса static class .... { } за пределы основного метода.Также рекомендуется начинать занятия с заглавных букв (например, AddPanelAction).

1 голос
/ 03 января 2012

Поздний день и короткий доллар ... но я все равно добавлю его.

Большинство примеров Java ActionListener в Интернете слишком сложны. Чтобы понять это, вам просто нужны форма, кнопка и actionListener. В приведенном ниже примере сервер форм в качестве прослушивателя через добавление 'Implements ActionListener'.

import java.applet.Applet;
import java.awt.Button;
import java.awt.Toolkit;
import java.awt.BorderLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class Sample extends Applet implements ActionListener {
    Button button;

    public void init() {
        setLayout(new BorderLayout());
        button = new Button("Test");
        add("Center", button);

        button.addActionListener(this);
    }

    public void actionPerformed(ActionEvent e) {
        // your code to do what you want when the button was clicked goes here
    }
}
1 голос
/ 03 января 2012

Класс actionlistener должен быть объявлен вне метода main следующим образом:

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

public class Main
{
    public static void main(String args[])
    {
        // Create Frame 1
        JFrame frame = new JFrame("Frame 1");
        frame.setSize(333,333);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // Create panel
        JPanel panel = new JPanel();

        // Create button
        JButton button = new JButton("Press me!");

        // Add things
        panel.add(button);
        frame.add(panel);
        frame.setVisible(true);

        // Add the action listener to that button
        button.addActionListener(new action());

    }

    public static class action implements ActionListener {

        public void actionPerformed(ActionEvent e) {
            // Create Frame 2
                JFrame frame2 = new JFrame("Frame 2");
                frame2.setSize(200,200);
                frame2.setVisible(true);
                frame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                JLabel label = new JLabel("Clicked!");
                JPanel panel2 = new JPanel();

                // First add to frame2 the panel just create
                frame2.add(panel2);

                // Add to panel the label
                panel2.add(label);
        }

    }

}

Или вы можете объявить actionlistener, используя анонимный внутренний класс, подобный этому:

button.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                // Do things here
            }

        });
1 голос
/ 03 января 2012

Статические классы не могут быть определены внутри метода.Переместите этот класс за пределы метода main или объявите свой класс нестатическим внутри самого метода main, если вам нужно.Статический класс всегда требует один внешний нестатический класс.

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