首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java架构--关于ActionListener约定的问题

Java架构--关于ActionListener约定的问题
EN

Stack Overflow用户
提问于 2009-12-07 11:48:41
回答 1查看 1K关注 0票数 2

我正在制作一个显示图形和操作图形的用户界面。该类扩展了实现ActionListener的JFrame。然后,ActionListener根据操作调用不同的类来操作图形。当这个类只有很少的ActionListeners时,这是可行的;然而,现在这个类变得难以管理了。

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

我所建议的是将类分解为一个接口类和第二个ActionListener类,并静态地访问接口组件。我想知道的是,这是否遵循基本的设计约定?如果这是一种可接受的方法,您会将主类放在用户界面类中还是放在ActionListener类中?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-12-07 11:53:07

Not a duplicate question... but my answer should help with your question

简而言之,我更倾向于让JFrame类不实现ActionListener,然后在JFrame中有许多命名的内部类来实现ActionListener。

我会把main放在一个类中...并将其称为Main。

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

代码语言:javascript
复制
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:

代码语言:javascript
复制
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);
    }
}
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1857695

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档