Java体系结构-关于ActionListener约定的问题

Java体系结构-关于ActionListener约定的问题,java,swing,architecture,conventions,Java,Swing,Architecture,Conventions,我正在制作一个显示图形和操纵图形的用户界面。该类扩展JFrame实现ActionListener。ActionListener然后根据动作调用不同的类来操纵图形。这在课堂上几乎没有听众的情况下起作用;但是,现在该类变得不可管理 我知道为了封装,最好将ActionListener放在用户界面类中,因为它需要访问界面的非静态组件。然而,封装和可读性之间似乎存在冲突 我的建议是将类分成一个类用于接口,另一个类用于ActionListener,并静态访问接口组件。我想知道的是,这是否遵循基本的设计惯例?

我正在制作一个显示图形和操纵图形的用户界面。该类扩展JFrame实现ActionListener。ActionListener然后根据动作调用不同的类来操纵图形。这在课堂上几乎没有听众的情况下起作用;但是,现在该类变得不可管理

我知道为了封装,最好将ActionListener放在用户界面类中,因为它需要访问界面的非静态组件。然而,封装和可读性之间似乎存在冲突

我的建议是将类分成一个类用于接口,另一个类用于ActionListener,并静态访问接口组件。我想知道的是,这是否遵循基本的设计惯例?如果这是一种可接受的方法,您会将主类放在用户界面类还是ActionListener类中?

简而言之,我的首选是让JFrame类不实现ActionListener,然后让许多命名的内部类与JFrame一起实现ActionListener

我会把主干放在一个单独的类中。。。叫它Main

以下是我喜欢的一些示例代码:

import javax.swing.JFrame;
import javax.swing.SwingUtilities;


public class Main
{
    private Main()
    {
    }

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

    private static void createAndShowGUI()
    {
        final FooFrame frame;

        frame = new FooFrame();
        frame.setupGUI();
        frame.pack();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}
然后是GUI:

import java.awt.FlowLayout;
import java.awt.LayoutManager;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;


public class FooFrame
    extends JFrame
{
    private final JButton incrementBtn;
    private final JButton decrementBtn;
    private int value;

    {
        incrementBtn = new JButton("++");
        decrementBtn = new JButton("--");
    }

    private class IncrementListener
        implements ActionListener
    {

        public void actionPerformed(final ActionEvent evt)
        {
            increment();
        }

    }

    private class DecrementListener
        implements ActionListener
    {

        public void actionPerformed(final ActionEvent evt)
        {
            decrement();
        }

    }

    public void setupGUI()
    {
        final LayoutManager layout;

        layout = new FlowLayout();
        setLayout(layout);
        setupListeners();
        addComponents();
    }

    private void setupListeners()
    {
        incrementBtn.addActionListener(new IncrementListener());
        decrementBtn.addActionListener(new DecrementListener());
    }

    private void addComponents()
    {
        add(incrementBtn);
        add(decrementBtn);
    }

    private void increment()
    {
        value++;
        System.out.println("value = " + value);
    }

    private void decrement()
    {
        value--;
        System.out.println("value = " + value);
    }
}

很好的答案,但在我接受这个答案之前,让我确定我明白了。您建议JFrame和Actionlistener类都实现Actionlistener。JFrame会解释它并将其传递给ActionListener进行处理?给我一点时间,我会发布一些代码:-)(只需开始工作…考试时间:-)非常感谢,我非常感谢。