首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >传递JFrame中组件列表的JFrame

传递JFrame中组件列表的JFrame
EN

Stack Overflow用户
提问于 2013-01-17 10:44:19
回答 2查看 552关注 0票数 1

我很困惑,很多我见过的例子只处理一个按钮的听者正在传递。我希望能够将视图类(JFrame)的所有组件传递给Controller,它可以轻松地访问这些组件的侦听器。我怎么能轻而易举地做到这一点。这就是我到目前为止对JMenuItem所做的工作,但是在JFrame中,我有更多的按钮,不想每次都在构造函数中重复。

代码语言:javascript
复制
 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");
  }


    }   

//类视图

代码语言:javascript
复制
  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){}
        }


    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-17 10:49:51

添加如下方法:

代码语言:javascript
复制
private void setListener(AbstractButton button, ActionListener listener, String command) {
  button.addActionListener(listener);
  button.setActionCommand(command);
}

构建一个EventController实例。

代码语言:javascript
复制
EventController controller = new EventController();

然后,为每个按钮调用它:

代码语言:javascript
复制
setListener(addEvent, controller, "add");
...
票数 2
EN

Stack Overflow用户

发布于 2013-01-17 10:47:56

只创建一次侦听器实例并重用它。像这样

代码语言:javascript
复制
    EventController lst=new EventController();
    addEvent.addActionListener(lst);
    addEvent.setActionCommand("add");
    editEvent.addActionListener(lst);
    editEvent.setActionCommand("edit");
    deleteEvent.addActionListener(lst);
    deleteEvent.setActionCommand("delete");
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14377262

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档