[英]Passing int value from one jFrame to another jFrame using ActionListener
[英]Passing ActionListener of a List of components in a JFrame
我很困惑,我見過的許多例子只涉及一個按鈕監聽器被傳遞。 我希望能夠將View類的所有組件(JFrame)傳遞給Controller類,它可以輕松訪問這些組件的偵聽器。 我怎么能這么容易做到 這是我到目前為止用JMenuItem
做的,但是在JFrame中我有更多的按鈕,不想每次都在構造函數中重復。
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){}
}
}
只創建一次偵聽器實例並重用它。 像這樣
EventController lst=new EventController();
addEvent.addActionListener(lst);
addEvent.setActionCommand("add");
editEvent.addActionListener(lst);
editEvent.setActionCommand("edit");
deleteEvent.addActionListener(lst);
deleteEvent.setActionCommand("delete");
添加如下方法:
private void setListener(AbstractButton button, ActionListener listener, String command) {
button.addActionListener(listener);
button.setActionCommand(command);
}
構建一個EventController
實例。
EventController controller = new EventController();
然后,為每個按鈕調用它:
setListener(addEvent, controller, "add");
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.