java - AddActionListener 在我的 JButton 上不起作用
问题描述
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
根本不工作。
你知道为什么这不起作用吗?控制器和视图似乎没有连接。
如果你有任何关于在 Swing 中使用 MVC 的建议,我会有点困惑,因为我不知道把我的听众放在哪里。
解决方案
像下面这样发布 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");
}
}
推荐阅读
- react-native - React-native : 自签名认证实现
- r - 将核密度估计提取到 R 中的新样本点
- sql-server - 尝试连接到我的 Docker 实例时在 SSMS 中出现错误 26
- javascript - Javascript从对象数组中删除重复项
- java - maven找不到依赖,eclipse正常工作,有ca.uhn.hapi.fhir依赖
- php - php后端。前端角。部署在服务器上时路由不起作用
- simulink - Simulink 传递函数
- java - 如何读取文件,并将其中的某些部分替换为不同文件中的内容?
- azure - 为什么我不能使用@
将文件作为参数传递? - sql - SQL 在第一次匹配时停止以节省 CPU 和内存