AddActionListener не работает на моем JButton - PullRequest
0 голосов
/ 27 декабря 2018

Я пытаюсь поместить слушатель действия в JButton с именем btnNew, который, на мой взгляд, выглядит так:

Просмотр:

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, я немного растерялся, потому что не знаю, куда поместить моего слушателя.

1 Ответ

0 голосов
/ 27 декабря 2018

Размещение 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");
    }
}
...