我很困惑,我见过的很多示例只处理一个按钮侦听器被传递。我希望能够通过全部将视图类(JFrame)的组件添加到Controller类中,以便轻松访问这些组件的侦听器。我怎样才能轻松做到这一点。这是我迄今为止所做的与JMenuItem
,但在JFrame中我有更多的按钮,不想每次在构造函数中重复。在JFrame中传递组件列表的ActionListener
public class EventController implements ActionListener {
private EventModel model;
private EventView view;
public EventController(){
model = new EventModel();
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("add")) {
JOptionPane.showMessageDialog(null, "add button clicked");
} else if (e.getActionCommand().equals("edit")) {
JOptionPane.showMessageDialog(null, "edit button clicked");
} else if (e.getActionCommand().equals("delete")) {
JOptionPane.showMessageDialog(null, "delete button clicked");
}
}
//类查看
public class EventView extends javax.swing.JFrame {
Connection conn = JavaConnect.ConnectDB();
PreparedStatement pst = null;
ResultSet rs = null;
public EventView() {
initComponents();
updateEventTable();
addEvent.addActionListener(new EventController());
addEvent.setActionCommand("add");
editEvent.addActionListener(new EventController());
editEvent.setActionCommand("edit");
deleteEvent.addActionListener(new EventController());
deleteEvent.setActionCommand("delete");
}
public void updateEventTable() {
try {
String sql = "SELECT date as 'Date',eventName as 'Name', time as 'Start Time' FROM Event";
pst = conn.prepareStatement(sql);
rs = pst.executeQuery();
tableEvent.setModel(DbUtils.resultSetToTableModel(rs));
tableEvent.getColumnModel().getColumn(0).setPreferredWidth(80);
tableEvent.getColumnModel().getColumn(1).setPreferredWidth(170);
tableEvent.getColumnModel().getColumn(2).setPreferredWidth(110);
}
catch (Exception e) {
JOptionPane.showMessageDialog(null, e);
} finally {
try {
rs.close(); pst.close();conn.close();;
} catch(SQLException e){}
}
}
如果不只是一个JButton,但菜单项,复选框等的混合参数是否更换的JButton用什么成分? – Hoody
不,用AbstractButton替换,请参阅我编辑的答案。 –
:D谢谢,重复setListener()在所有按钮的View类的构造函数中,menuitems(有6)是一个不好的做法? 也想知道如何将视图类初始化的控制权传递给Controller类,所以我避免在那里写入sql语句,有什么想法? – Hoody