0

MVCのコントローラークラスは次のとおりです。

    public class EventController extends MouseAdapter implements ActionListener {
    private EventModel model;
    private EventView  view;


    /** Constructor */
   public EventController(EventModel myModel, EventView myView){
       model = myModel;
       view = myView;     
    }

   public void setUpListeners() {
       this.view.addEventButton.addActionListener(this); 
       this.view.addEventMenuItem.addActionListener(this);
       this.view.editEventMenuItem.addActionListener(this);
       this.view.tableEvent.addMouseListener(this);

   }

   @Override
   public void actionPerformed(ActionEvent e){
       Object button = e.getSource();
       if(button==this.view.addEventButton) {
           setEventDetails();          
       }
       else if (button==this.view.addEventMenuItem) {
           this.view.addDialog.setVisible(true);
       }
       else if(button==this.view.editEventMenuItem) {
           this.view.editDialog.setVisible(true);
       }

   }
   /*to change the display of label text of the VIEW according to the selected row of the table tableEvent*/

    @Override
    public void mouseClicked(java.awt.event.MouseEvent event) {
      int rowSelected = view.tableEvent.getSelectedRow();
      String tableClick = view.tableEvent.getModel().getValueAt(view.tableEvent.convertRowIndexToModel(rowSelected), 0).toString();
      Events e = model.getEvent(tableClick); //tell model to change its state based on user input on views 
      view.changeDisplay(e);
    }

ラベルテキストを適切に変更するためのViewClassとそのchangeDisplay()メソッドは次のとおりです。

public class EventView extends javax.swing.JFrame {
private EventModel model;
public void changeDisplay(Events e) {
       evTitle.setText(""+e.getEventName());
       evWhen.setText("When: "+ e.getEventDate());
       evWhere.setText("Where: "+ e.getEventVenue());
       evDescription.setText("Description: "+ e.getEventDetail());
       evOpportunity.setText("Opporunity: "+ e.getEventOpportunity());
       evMoreDet.setText("More Details: "+ e.getEventMoreDetails());
   }


}

モデルクラスは次のとおりです。

 public class EventModel {
        Connection conn = JavaConnect.ConnectDB();
        PreparedStatement pst = null;
        ResultSet rs = null; 
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Events e = new Events(); 

public void addEvent(String name, Date date,String start, String venue, String details,
String opportunity, String more, String end) throws SQLException {
    try {
    String qry = "INSERT INTO EVENT(eventName,date,time,venue,details,opportunity,moreDetails,endTime) VALUES (?,?,?,?,?,?,?,?)";
    pst = conn.prepareStatement(qry);
    pst.setString(1, name);
    pst.setString(2, sdf.format(date));
    pst.setString(3, start);
    pst.setString(4, venue);
    pst.setString(5, details);
    pst.setString(6, opportunity);
    pst.setString(7, more);
    pst.setString(8, end);
    pst.executeUpdate(); 
    }
    finally{
       try{ pst.close(); } 
       catch (SQLException se) {}
      }
}



public Events getEvent(String tableClick) {


    try {
        pst = conn.prepareStatement("SELECT * FROM Event WHERE eventID='"+tableClick+"' ");
        rs = pst.executeQuery();
        while(rs.next()){      
        e.setEventName(rs.getString(2));
        System.out.println(rs.getString(2));
        e.setEventDate(rs.getString(3));
        e.setEventTime(rs.getString(4));
        e.setEventVenue(rs.getString(5));
        e.setEventDetail(rs.getString(6));
        e.setEventOpportunity(rs.getString(7));
        e.setEventMoreDetails(rs.getString(8));
        e.setEndTime(rs.getString(9));
        rs.close();
        pst.close();
       }
    } 
    catch(SQLException ex){
    ex.printStackTrace();
    } 
    return e;
} //end getEvent



}

表の行をクリックすると、ラベルテキストが正しく変更されます

私のプログラムには小さなエラーがありますが、これは何年もの間修正できないようです。基本的に、テーブルの行(tableEvent)をクリックすると、イベント「ソフトウェア開発キャリアイベント」のスクリーンショットに示されているように、テーブルの横のラベルに適切なテキストが表示されます。これは最初の実行では正常に機能しますが、モデルmouseClickedのメソッドを使用してイベントを追加した後、コントローラーのイベントメソッドはテキストの表示を変更しません。クラスのオブジェクトのインスタンス化で何か間違ったことをしたのか、メソッドが間違っているのか、コントローラーの実際にオーバーライドされたメソッドが間違っaddEventているのか、それが何であるかはわかりません。どうなり得るか?EventsaddEventmouseClicked

4

1 に答える 1

2

私の答えがあなたに役立つかどうかはわかりませんが、選択の変更はを使用して検出する必要がありますListSelectionListener。マウスクリックだけでなく、重要なイベントに対しても反応を提供するため、より優れています。テーブルにリスナーを追加するには、テーブルの選択モデルを使用するだけです。

myTable.getSelectionModel().addListSelectionListener(myListener)

おそらく、この変更は問題の解決に役立ちます

于 2013-01-22T22:22:58.260 に答える