37

行がダブルクリックされvalueChangedた場合にのみ、オーバーライドされたメソッドを呼び出す方法に興味があります。JTable今のところ、以下のコード スニペットは、1 回のクリック アクションまたはイベント矢印キーを実現して、ユーザーのリストをナビゲートし、JLabelそれに応じて調整します。私がやろうとしているのは、ワンクリックで行ったのと同じようなことですが、今回は IF と行がダブルクリックされた場合のみdto変更され、それ以外は何も起こりません。どうすればいいですか :(

   class ListDataUI {

    public void addListSelectionListener(ListSelectionListener listSelectionListener) {
            summaryTable.getSelectionModel().addListSelectionListener(listSelectionListener);

 public T getSelectedDTO() {
        final int selectedRowIndex = summaryTable.getSelectedRow();
        if (selectedRowIndex != -1) {
            return data.get(summaryTable.convertRowIndexToModel(selectedRowIndex));
        } else {
            return null;
        }
    }
        }
    }




    class MainMenu extends javax.swing.JFrame {
    private void initListeners() {
    searchTable.addListSelectionListener(new ListSelectionListener() {

        @Override
        public void valueChanged(ListSelectionEvent e) {
            if (!e.getValueIsAdjusting()) {
                AcademicDTO dto = (AcademicDTO) searchTable.getSelectedDTO();
                acImgLabel.setIcon(new ImageIcon());
                label_name.setText(dto.getTitle() + " " + dto.getForename() + " " + dto.getSurname());
                label_role.setText("Role: " + dto.getRole());
                label_phone.setText("Phone: " + dto.getPhone());
                label_room.setText("Room: " + dto.getRoom());
                label_hours.setText("Hours: " + dto.getHours());
                label_mobile.setText("Mobile: " + dto.getMobile());
                if (dto.getImage() != null) {
                    acImgLabel.setIcon(new ImageIcon(dto.getImage()));
                }
            }
        }
    });
}

}


 private void initListeners() {
    contactTable.addMouseListener(new MouseAdapter() {

        @Override
        public void mouseClicked(MouseEvent e) {
            ContactDTO dto = (ContactDTO) contactTable.getSelectedDTO();
            if (e.getClickCount() == 2) {
                System.out.println(dto.getForename());
            } else {
            }

        }
    });
}

上記の残りの部分がわからない...

4

3 に答える 3

95

これを試して:

mytable.addMouseListener(new MouseAdapter() {
    public void mousePressed(MouseEvent mouseEvent) {
        JTable table =(JTable) mouseEvent.getSource();
        Point point = mouseEvent.getPoint();
        int row = table.rowAtPoint(point);
        if (mouseEvent.getClickCount() == 2 && table.getSelectedRow() != -1) {
            // your valueChanged overridden method 
        }
    }
});
于 2013-10-25T09:28:28.580 に答える
2

イベント ハンドラのコードをホスト クラスのプライベート メソッドに再配置し、 を実装MouseListenerまたは拡張してMouseAdapterから、そこでプライベート メソッドを呼び出します。最初のステップ (つまり、プライベート メソッドを作成すると、複数のイベント ハンドラーから同じロジックを呼び出すことができます)。

のダブルクリックの検出は、MouseHandlerへの呼び出しによって簡単になります。MouseEvent.getClickCount()

于 2013-02-13T12:02:22.770 に答える
-2

@MooHa クラス ListDataUI は MouseListener を実装する必要があります。

于 2014-02-14T07:41:12.697 に答える