Java 中 JTable 的双击监听器

问题描述 投票:0回答:3

我很好奇,仅当双击

valueChanged
中的行时,如何调用
JTable
重写方法。目前,下面的代码片段实现了单击操作或事件箭头键来浏览人员列表,并相应地调整
JLabel
。我想做的是类似的事情,就像我单击一次一样,但是这次当且仅当双击一行时
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 {
            }

        }
    });
}

不确定上面的其余部分...

java swing jtable double-click listselectionlistener
3个回答
104
投票

试试这个:

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 && row != -1) {
            // note: the row number is the visual row number
            // when filtering or sorting it is not the model's row number
            // this line takes care of that
            int modelRow = table.convertRowIndexToModel(row);

            // your valueChanged overridden method
        }
    }
});

2
投票

将事件处理程序的代码重新定位到宿主类中的私有方法中,然后实现

MouseListener
或扩展
MouseAdapter
然后调用那里的私有方法。第一步(即创建私有方法可以帮助您从多个事件处理程序调用相同的逻辑)。

通过调用

MouseHandler
 可以轻松检测 
MouseEvent.getClickCount()

中的双击

-3
投票

@MooHa 你的 ListDataUI 类应该实现 MouseListener。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.