【问题标题】:AddActionListener not working on my JButtonAddActionListener 在我的 JButton 上不起作用
【发布时间】:2018-12-27 14:48:25
【问题描述】:

我正在尝试在我认为的名为 btnNew 的 JButton 上放置一个动作监听器:

查看:

public class MyWindow6 extends JFrame
{
    private JButton btnNew;

    private static final long serialVersionUID = 6579944958990616196L;

    public static void main(String[] args) throws UnsupportedLookAndFeelException
    {
        UIManager.setLookAndFeel(new NimbusLookAndFeel());
        MyWindow6 myWindow = new MyWindow6();
        myWindow.setVisible( true );

        public MyWindow6()
        {
            super( "JMenu sample" );

            btnNew = new JButton( new ImageIcon( "icons/save.png"));
            this.setSize(1200,800);
            this.setLocationRelativeTo( null );
            this.setDefaultCloseOperation( DISPOSE_ON_CLOSE );

            JPanel contentPane = (JPanel) this.getContentPane();

            JScrollPane leftScrollPane = new JScrollPane( new JTree());
            leftScrollPane.setPreferredSize( new Dimension(200, 0));
            contentPane.add( leftScrollPane, BorderLayout.WEST);

            JTable t = new JTable(DaoClef.createModel());
            JScrollPane scrollPane = new JScrollPane(t);
            t.setFillsViewportHeight(true);

            add(scrollPane, BorderLayout.CENTER);

            // toolbar
            JToolBar jtb = new JToolBar();
            btnNew.setToolTipText("Ajouter clef (CTRL + N");
            jtb.add(btnNew);
            contentPane.add(jtb, BorderLayout.NORTH);
        }
        
        public JButton getBtnNew() {
            return btnNew;
        }
        public void setBtnNew(JButton btnNew) {
            this.btnNew = btnNew;
        }
    }
} 

控制器:

public class Controller2 {

    private DaoClef dao;
    private MyWindow6 view;

    public Controller2(DaoClef d, MyWindow6 v) {
        dao = d;
        view = v;
    }

    public void initController() {

        view.getBtnNew().addActionListener(e -> delete());
    }

    private void delete() {
        System.out.println("hello");
    }
}

我没有收到任何错误,只是 println 根本不起作用。

您知道为什么这不起作用吗? 控制器和视图似乎没有连接。

如果您有任何关于将 MVC 与 Swing 结合使用的建议,我会感到有些困惑,因为我不知道将我的听众放在哪里。

【问题讨论】:

  • “AddActionListener 在我的 JButton 上不起作用” 哪个按钮?在这种情况下,应该只有一个。让它与一个一起工作,两个或更多的答案可能很明显。更一般地说:为了尽快获得更好的帮助,edit 添加minimal reproducible exampleShort, Self Contained, Correct Example
  • 你好,我正在尝试一个:btnNew
  • 发布 MCVE / SSCCE。
  • 更好吗?对不起,我是新人
  • 贴出的代码不是mcve。它甚至不编译,有与问题无关的代码(如Dao)和根本不使用的Controller2。请仔细阅读提供的链接。

标签: java swing model-view-controller actionlistener


【解决方案1】:

像下面这样发布 mcve,使问题和解决方案易于理解和重现:

import java.awt.BorderLayout;
import javax.swing.JButton;
import javax.swing.JFrame;

public class MyWindow6 extends JFrame
{
    private final JButton btnNew;
    public static void main(String[] args){
        new Controller2(new MyWindow6());
    }
    public MyWindow6()      {

        btnNew = new JButton( "Delete");
        this.setSize(120,80);
        this.setDefaultCloseOperation( DISPOSE_ON_CLOSE );
        add(btnNew, BorderLayout.PAGE_START);
        setVisible(true);
    }

    public JButton getBtnNew() {
        return btnNew;
    }
}

class Controller2 {

    private final MyWindow6 view;

    public Controller2(MyWindow6 v) {

        view = v;
        view.getBtnNew().addActionListener(e -> delete());
    }

    private void delete() {
        System.out.println("delete btn clicked");
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-27
    • 2013-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多